Почему команда md5sum <<< 'ddd'
(output:) d6d88f2e50080b9602da53dac1102762 -
верна, а md5sum << 'ddd'
нет?
Что <<<
значит?
Почему команда md5sum <<< 'ddd'
(output:) d6d88f2e50080b9602da53dac1102762 -
верна, а md5sum << 'ddd'
нет?
Что <<<
значит?
Ответы:
В <<<
Запускает «здесь строка»: строка раскрывается и подается на стандартный ввод программы. (В вашем случае не так много расширений.) Это эквивалентно следующему:
echo ddd | md5sum
С другой стороны, <<
начинается здесь документ. Все последующие строки, вплоть до одной, содержащей маркер, ddd
будут содержать ввод программы. (Вы должны использовать маркер, который вряд ли появится в ваших данных.) Вы можете достичь того же эффекта, что и выше, например:
md5sum <<END
ddd
END
Существует одно различие между <<END
и <<'END'
: без кавычек любые переменные, escape-последовательности и т. Д. В этом документе будут расширены как обычно.
<<<
вводит строку здесь : строка после <<<
передается в качестве ввода в команду. Это происходит из порта Байрона Ракициса rc
(оболочка Plan 9) в Unix, а также присутствует в zsh, ksh93 и bash.
<<
представляет здесь документ : последующие строки сценария оболочки передаются в качестве входных данных для команды, а строка после <<
является терминатором. Здесь документы работают во всех оболочках в стиле Борна (Bourne, POSIX, ash, bash, ksh, zsh,…), в оболочках в стиле C (csh, tcsh) и в оболочках Plan 9 (rc, es).
<<<
не является ksh
расширением, путь rc
-> zsh
-> ksh93
-> bash
( ksh
примечания к выпуску подтверждаются для однократного заимствования функции zsh
). <<
также работает в rc
стиле снарядов
rc
и, zsh
<<<
хотя в этом rc
нет заключительного символа новой строки и не используется временный файл (используется канал и дополнительный процесс, подающий его, по крайней мере, в порт Linux).
<<<
поступает из порта Unix, rc
поскольку он не похож на Plan9 rc
.
rc
,<<<
(вроде<<
) использует временный файл, поэтому может использоваться командами, которыеlseek
их stdin.