Відповіді:
У <<<
Запускає «тут рядок»: рядок розкривається і подається на стандартне введення програми. (У вашому випадку розширення не відбувається багато.) Це рівнозначно цьому:
echo ddd | md5sum
З іншого боку, <<
запускає тут документ. Усі наступні рядки до одного, що містять маркер, ddd
будуть містити введення програми. (Ви повинні використовувати маркер, який, швидше за все, не з’явиться у ваших даних.) Ви можете досягти такого ж ефекту, як вище, як це:
md5sum <<END
ddd
END
Є одна відмінність між <<END
та <<'END'
: Без лапок, будь-які змінні, послідовності виходу тощо в документі тут будуть розширені, як зазвичай.
<<<
вводить рядок тут : рядок після <<<
передається як вхід до команди. Він бере свій початок у порту Байрона Ракіціса rc
(оболонка План 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
оскільки він не схожий на план9 rc
.
rc
,<<<
(like<<
) використовує тимчасовий файл, тому його можна використовувати командам, щоlseek
їх stdin.