Wiersz polecenia: <<< zamiast <<

63

Dlaczego polecenie md5sum <<< 'ddd' (output :) jest d6d88f2e50080b9602da53dac1102762 -prawidłowe, a md5sum << 'ddd'nie?

Co <<<znaczy

Jean Paulus
źródło

Odpowiedzi:

45

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.

Chirlu
źródło
3
Tam, gdzie nie jest to równoważne, z wyjątkiem tego rc, że <<<(jak <<) używa pliku tymczasowego, więc może być używany przez komendy, które lseekich stdin.
Stéphane Chazelas
32

<<<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).

Gilles
źródło
3
Nie, <<<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
Stéphane Chazelas
Istnieje różnica między 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).
Stéphane Chazelas
Mówiąc ściślej, wygląda na to, że <<<pochodzi z portu Unixa, rcponieważ nie wygląda na rcto, że ma go Plan9 .
Stéphane Chazelas