Linha de comando: <<< em vez de <<

63

Por que o comando md5sum <<< 'ddd' (output :) está d6d88f2e50080b9602da53dac1102762 -correto e md5sum << 'ddd'não?

O que <<<significa isso ?

Jean Paulus
fonte

Respostas:

45

Os <<<inicia um “aqui string”: A corda é expandido e alimentado para stdin do programa. (No seu caso, não há muita expansão acontecendo.) É equivalente a isso:

echo ddd | md5sum

Por outro lado, <<inicia um documento aqui. Todas as seguintes linhas, até uma que contenha o marcador ddd, incluirão a entrada do programa. (Você deve usar um marcador que provavelmente não aparecerá nos seus dados.) Você pode obter o mesmo efeito acima, desta forma:

md5sum <<END
ddd
END

Há uma diferença entre <<ENDe <<'END': Sem as aspas, quaisquer variáveis, seqüências de escape etc. no documento aqui serão expandidas como de costume.

chirlu
fonte
3
Onde não é equivalente é que, exceto em rc, <<<(como <<) usa um arquivo temporário para que possa ser usado por comandos que lseekseus stdin.
Stéphane Chazelas
32

<<<introduz uma string here : a string after <<<é passada como entrada para o comando. Isso se origina no porto de rc(um shell do Plano 9) de Byron Rakitzis para o Unix e também está presente no zsh, ksh93 e bash.

<<apresenta um documento here : as linhas subseqüentes do shell script são passadas como entrada para o comando e a string after <<é um terminador. Aqui, os documentos funcionam em todos os shells no estilo Bourne (Bourne, POSIX, ash, bash, ksh, zsh,…), shells no estilo C (csh, tcsh) e shells no plano 9 (rc, es).

Gilles 'SO- parar de ser mau'
fonte
3
Não, <<<não é uma kshextensão, o caminho é rc-> zsh-> ksh93-> bash(as kshnotas de versão reconhecem por emprestar o recurso uma vez zsh). <<Também funciona em rcconchas de estilo
Stéphane Chazelas
Há uma diferença entre o rce, zsh <<<embora rcisso não inclua um caractere de nova linha à direita e não use um arquivo temporário (usa um pipe e um processo extra para alimentá-lo pelo menos na porta do Linux).
Stéphane Chazelas
Para ser mais preciso, parece que <<<vem da porta Unix rc, já que não parece com o Plan9 rc.
Stéphane Chazelas