Скрипты оболочки Linux: неожиданное поведение переменных

Скрипты оболочки Linux: неожиданное поведение переменных

У меня есть переменная $myvar, содержащая две строки, и я хочу поместить первую из них в новую переменную.

Когда я пытаюсь:

$ myvar1 = $(echo $myvar | head -n 1) 

Это не работает, потому что echo не выводит символы новой строки, как я ожидаю.

Очевидно, я могу сделать это:

$ myvar1 = $(echo $myvar | cut -d " " -f 1)

Это будет работать, поскольку вывод echo содержит одно слово в первой строке и одно слово во второй.

У меня два вопроса:

  1. Почему echo печатает пробелы вместо переносов строк?
  2. Можно ли сделать это проще или правильнее (я не профессионал в написании скриптов, возможно я что-то упускаю)

решение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работает идеально. Это зависит от ваших требований и возможных значений, действительно ли это то, что вам нужно.

Связанный контент