Сценарии оболочки Linux: непредвиденное поведение переменных
У меня есть переменная $myvar
это содержит две строки, и я хочу поместить первую из них в новую переменную.
Когда я пытаюсь:
$ myvar1 = $(echo $myvar | head -n 1)
Это не работает, потому что эхо не выводит символы новой строки, как я ожидаю.
Очевидно, я могу сделать это:
$ myvar1 = $(echo $myvar | cut -d " " -f 1)
Это будет работать, так как вывод echo содержит одно слово в первой строке и одно слово во второй.
У меня есть два вопроса:
- Почему эхо печатает пробелы вместо разрывов строк?
- Возможно ли сделать это легко или более правильно (я не профессионал в написании сценариев, возможно, я что-то здесь упускаю)
1 ответ
Решение
Оберните аргумент в echo
в кавычках, чтобы правильно сохранить пробелы.
echo "$myvar"
В противном случае разделенные пробелами элементы значения будут рассматриваться как отдельные аргументы echo
,
$ ls -1
Desktop
Documents
Downloads
Movies
Music
Pictures
Sites
$ myvar="$( ls -1 )"
$ echo $myvar
Desktop Documents Downloads Movies Music Pictures Sites
$ echo "$myvar"
Desktop
Documents
Downloads
Movies
Music
Pictures
Sites
Чтобы получить первую строку чего-то, head -n1
работает отлично. Это зависит от ваших требований и возможных значений, действительно ли это то, что вам нужно.