Dlaczego polecenie md5sum <<< 'ddd'
(output :) jest d6d88f2e50080b9602da53dac1102762 -
prawidłowe, a md5sum << 'ddd'
nie?
Co <<<
znaczy
Dlaczego polecenie md5sum <<< 'ddd'
(output :) jest d6d88f2e50080b9602da53dac1102762 -
prawidłowe, a md5sum << 'ddd'
nie?
Co <<<
znaczy
Odpowiedzi:
Do <<<
rozpoczyna „tu łańcuch”: ciąg jest rozszerzona i doprowadza do stdin. (W twoim przypadku dzieje się niewiele ekspansji.) Jest to równoważne z tym:
echo ddd | md5sum
Z drugiej strony <<
rozpoczyna dokument tutaj. Wszystkie kolejne wiersze, aż do jednego zawierającego znacznik, ddd
będą zawierać dane wejściowe programu. (Powinieneś użyć znacznika, który prawdopodobnie nie pojawi się w twoich danych.) Możesz osiągnąć taki sam efekt jak powyżej:
md5sum <<END
ddd
END
Jest jedna różnica między <<END
i <<'END'
: Bez cudzysłowów wszelkie zmienne, sekwencje specjalne itp. W niniejszym dokumencie zostaną rozszerzone jak zwykle.
<<<
wprowadza ciąg tutaj : ciąg po <<<
jest przekazywany jako dane wejściowe do polecenia. Pochodzi z portu Byrona Rakitzisa rc
(powłoki Plan 9) dla Uniksa i jest również obecny w zsh, ksh93 i bash.
<<
wprowadza dokument tutaj : kolejne wiersze skryptu powłoki są przekazywane jako dane wejściowe do polecenia, a ciąg po <<
jest terminatorem. Tutaj dokumenty działają we wszystkich powłokach typu Bourne'a (Bourne, POSIX, ash, bash, ksh, zsh,…), powłokach typu C (csh, tcsh) i powłokach Plan 9 (rc, es).
<<<
nie jest ksh
rozszerzeniem, ścieżka to rc
-> zsh
-> ksh93
-> bash
( ksh
informacje o wydaniu potwierdzają jednorazowe pożyczenie tej funkcji zsh
). <<
działa również w rc
stylowych muszlach
rc
i zsh
<<<
chociaż rc
nie zawiera końcowego znaku nowej linii i nie używa pliku tymczasowego (używa potoku i dodatkowego procesu zasilającego go przynajmniej w porcie do Linuksa).
<<<
pochodzi z portu Unixa, rc
ponieważ nie wygląda na rc
to, że ma go Plan9 .
rc
, że<<<
(jak<<
) używa pliku tymczasowego, więc może być używany przez komendy, którelseek
ich stdin.