Відповіді:
У <<<Запускає «тут рядок»: рядок розкривається і подається на стандартне введення програми. (У вашому випадку розширення не відбувається багато.) Це рівнозначно цьому:
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.