3

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

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

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

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

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

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

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

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

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

1 ответ1

5

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .