Por que o comando md5sum <<< 'ddd'
(output :) está d6d88f2e50080b9602da53dac1102762 -
correto e md5sum << 'ddd'
não?
O que <<<
significa isso ?
Por que o comando md5sum <<< 'ddd'
(output :) está d6d88f2e50080b9602da53dac1102762 -
correto e md5sum << 'ddd'
não?
O que <<<
significa isso ?
Respostas:
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 <<END
e <<'END'
: Sem as aspas, quaisquer variáveis, seqüências de escape etc. no documento aqui serão expandidas como de costume.
<<<
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).
<<<
não é uma ksh
extensão, o caminho é rc
-> zsh
-> ksh93
-> bash
(as ksh
notas de versão reconhecem por emprestar o recurso uma vez zsh
). <<
Também funciona em rc
conchas de estilo
rc
e, zsh
<<<
embora rc
isso 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).
<<<
vem da porta Unix rc
, já que não parece com o Plan9 rc
.
rc
,<<<
(como<<
) usa um arquivo temporário para que possa ser usado por comandos quelseek
seus stdin.