Командний рядок: <<< замість <<


63

Чому команда md5sum <<< 'ddd' (output:) d6d88f2e50080b9602da53dac1102762 -правильна, а md5sum << 'ddd'ні?

Що <<<означає?

Відповіді:


45

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

echo ddd | md5sum

З іншого боку, <<запускає тут документ. Усі наступні рядки до одного, що містять маркер, dddбудуть містити введення програми. (Ви повинні використовувати маркер, який, швидше за все, не з’явиться у ваших даних.) Ви можете досягти такого ж ефекту, як вище, як це:

md5sum <<END
ddd
END

Є одна відмінність між <<ENDта <<'END': Без лапок, будь-які змінні, послідовності виходу тощо в документі тут будуть розширені, як зазвичай.


3
Якщо це не еквівалентно, це те, що, крім in rc, <<<(like <<) використовує тимчасовий файл, тому його можна використовувати командам, що lseekїх stdin.
Стефан Шазелас

32

<<<вводить рядок тут : рядок після <<<передається як вхід до команди. Він бере свій початок у порту Байрона Ракіціса rc(оболонка План 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стилях оболонок
Stéphane Chazelas

Там різниця між rcі , zsh <<<хоча в тому , що rc«з не косим символом нового рядка і не використовує тимчасовий файл (використовує трубу і додатковий процес подачі його , по крайней мере в порт для Linux).
Стефан Шазелас

Якщо бути точнішим, схоже, що він <<<походить з порту Unix, rcоскільки він не схожий на план9 rc.
Стефан Шазелас
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.