Командная строка: <<< вместо <<


Ответы:


45

В <<<Запускает «здесь строка»: строка раскрывается и подается на стандартный ввод программы. (В вашем случае не так много расширений.) Это эквивалентно следующему:

echo ddd | md5sum

С другой стороны, <<начинается здесь документ. Все последующие строки, вплоть до одной, содержащей маркер, dddбудут содержать ввод программы. (Вы должны использовать маркер, который вряд ли появится в ваших данных.) Вы можете достичь того же эффекта, что и выше, например:

md5sum <<END
ddd
END

Существует одно различие между <<ENDи <<'END': без кавычек любые переменные, escape-последовательности и т. Д. В этом документе будут расширены как обычно.


3
Где это не эквивалентно, это то, что, кроме как rc, <<<(вроде <<) использует временный файл, поэтому может использоваться командами, которые lseekих stdin.
Стефан Шазелас

32

<<<вводит строку здесь : строка после <<<передается в качестве ввода в команду. Это происходит из порта Байрона Ракициса rc(оболочка Plan 9) в Unix, а также присутствует в zsh, ksh93 и bash.

<<представляет здесь документ : последующие строки сценария оболочки передаются в качестве входных данных для команды, а строка после <<является терминатором. Здесь документы работают во всех оболочках в стиле Борна (Bourne, POSIX, ash, bash, ksh, zsh,…), в оболочках в стиле C (csh, tcsh) и в оболочках Plan 9 (rc, es).


3
Нет, <<<не является kshрасширением, путь rc-> zsh-> ksh93-> bash( kshпримечания к выпуску подтверждаются для однократного заимствования функции zsh). <<также работает в rcстиле снарядов
Стефан Шазелас

Есть разница между rcи, zsh <<<хотя в этом rcнет заключительного символа новой строки и не используется временный файл (используется канал и дополнительный процесс, подающий его, по крайней мере, в порт Linux).
Стефан Шазелас

Чтобы быть более точным, похоже, что он <<<поступает из порта Unix, rcпоскольку он не похож на Plan9 rc.
Стефан Шазелас
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.