Почему команда 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.