Разделение слов с помощью двойных кавычек против использования кавычек

У меня есть файл requirements.txt , содержащий зависимости для будущей установки. У файла просто одно имя в каждой строке:

$cat requirements.txt 
pandas
numpy
...

Некоторая часть моего фактического кода выглядит так:

packages=$(cat "requirements.txt") || exit

Когда я выполняю echo $ packages вместо «$ packages» , Я получаю следующий результат

echo $packages
pandas numpy ...

VS

echo "$packages"
pandas
numpy
...

Мне трудно понять, как на самом деле происходит разделение. Мне кажется, что версия без кавычек не разделяет строку, а двойные кавычки делают что-то странное и выводят результат построчно, хотя они должны предотвращать разбиение (то есть я ожидал, что результатом будет одна строка) Я упустил здесь что-то очевидное?

0
задан 23 December 2020 в 03:16

1 ответ

Переменная packages включает в себя несколько строк, разделенных символами новой строки — когда вы повторяете раскрытие в кавычках, это именно то, что вы видите, поскольку вся многострочная строка передается как один аргумент в команда эхо.

Когда вы повторяете расширение без кавычек, оно подвергается разбиению на слова (и расширению подстановки — хотя это здесь не имеет значения, поскольку ваш ввод не содержит подстановочных символов). Разделение слов основано на значении переменной IFS, которая по умолчанию состоит из пробела, табуляции и новой строки. Каждый токен с разделителями IFS передается в качестве отдельного аргумента в echo, который выводит каждый из них по очереди, разделенный одним пробелом.

Дополнительная литература:

0
ответ дан 23 December 2020 в 01:21

Другие вопросы по тегам:

Похожие вопросы: