Что означает оператор Bash <<<? - PullRequest
20 голосов
/ 31 октября 2011

Что означает оператор bash <<<, как внутри следующего блока кода? И как получается, что $ IFS остается пробелом, а не точкой? </p>

LINE="7.6.5.4"
IFS=. read -a ARRAY <<< "$LINE"
echo "$IFS"
echo "${ARRAY[@]}"

Ответы [ 3 ]

16 голосов
/ 31 октября 2011

Перенаправляет строку на стандартный ввод команды.

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

8 голосов
/ 31 октября 2011

С man bash

Здесь строки Вариант здесь документов, формат:

     <<<word

Слово расширяется и передается команде на стандартный ввод.

. в строке IFS эквивалентно source в bash.

Обновление: Еще от man bash (Спасибо, gsklee, sehe)

IFS Внутренний разделитель полей, который используется для разделения слов после раскрытия и для разделения строк на слова с помощью встроенной команды чтения .Значением по умолчанию является «<space><tab><new‐line>».

еще больше из man bash

Среда для любой простой команды или функции может быть временно расширена путем добавления к ней префиксаприсвоение параметров, как описано выше в PARAMETERS.Эти операторы присваивания влияют только на среду, видимую этой командой.

2 голосов
/ 31 октября 2011

Причина, по которой IFS не устанавливается, заключается в том, что bash не видит это как отдельную команду ... вам нужно поставить перевод строки или точку с запятой после команды, чтобы завершить ее:

$ cat /tmp/ifs.sh
LINE="7.6.5.4"
IFS='.'  read -a ARRAY <<< "$LINE"
echo "$IFS"
echo "${ARRAY[@]}"

$ bash /tmp/ifs.sh 


7 6 5 4

но

$ cat /tmp/ifs.sh 
LINE="7.6.5.4"
IFS='.';  read -a ARRAY <<< "$LINE"
echo "$IFS"
echo "${ARRAY[@]}"

$ bash /tmp/ifs.sh 
.
7 6 5 4

Я не уверен, почему первый способ не был синтаксической ошибкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...