
У меня есть переменная $myvar
, содержащая две строки, и я хочу поместить первую из них в новую переменную.
Когда я пытаюсь:
$ myvar1 = $(echo $myvar | head -n 1)
Это не работает, потому что echo не выводит символы новой строки, как я ожидаю.
Очевидно, я могу сделать это:
$ myvar1 = $(echo $myvar | cut -d " " -f 1)
Это будет работать, поскольку вывод echo содержит одно слово в первой строке и одно слово во второй.
У меня два вопроса:
- Почему 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
работает идеально. Это зависит от ваших требований и возможных значений, действительно ли это то, что вам нужно.