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, dddbę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 <<ENDi <<'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 kshrozszerzeniem, ścieżka to rc-> zsh-> ksh93-> bash( kshinformacje o wydaniu potwierdzają jednorazowe pożyczenie tej funkcji zsh). <<działa również w rcstylowych muszlach
rci zsh <<<chociaż rcnie 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, rcponieważ nie wygląda na rcto, że ma go Plan9 .
rc, że<<<(jak<<) używa pliku tymczasowego, więc może być używany przez komendy, którelseekich stdin.