¿Por qué el comando md5sum <<< 'ddd'
(salida :) es d6d88f2e50080b9602da53dac1102762 -
correcto y md5sum << 'ddd'
no?
Que <<<
significa
¿Por qué el comando md5sum <<< 'ddd'
(salida :) es d6d88f2e50080b9602da53dac1102762 -
correcto y md5sum << 'ddd'
no?
Que <<<
significa
Respuestas:
Los <<<
inicia una “cadena aquí”: la cadena se expande y se alimentan a la entrada estándar del programa. (En su caso, no está ocurriendo mucha expansión). Es equivalente a esto:
echo ddd | md5sum
Por otro lado, <<
comienza un documento aquí. Todas las siguientes líneas hasta una que contenga el marcador ddd
comprenderán la entrada del programa. (Debería usar un marcador que probablemente no aparezca en sus datos). Podría lograr el mismo efecto que el anterior de la siguiente manera:
md5sum <<END
ddd
END
Hay una diferencia entre <<END
y <<'END'
: sin las comillas, cualquier variable, secuencia de escape, etc. en el documento aquí se expandirá como de costumbre.
<<<
introduce una cadena aquí : la cadena posterior <<<
se pasa como entrada al comando. Esto se origina en el puerto de Byron Rakitzis de rc
(un shell del Plan 9) a Unix, y también está presente en zsh, ksh93 y bash.
<<
introduce un documento aquí : las líneas posteriores del script de shell se pasan como entrada al comando y la cadena posterior <<
es un terminador. Aquí los documentos funcionan en todos los shells de estilo Bourne (Bourne, POSIX, ash, bash, ksh, zsh, ...), shells de estilo C (csh, tcsh) y shells de Plan 9 (rc, es).
<<<
no es una ksh
extensión, la ruta es rc
-> zsh
-> ksh93
-> bash
(las ksh
notas de la versión reconocen por una vez que toman prestada la función zsh
). <<
también funciona en rc
conchas de estilo
rc
y zsh
<<<
aunque en eso rc
no incluye un carácter de nueva línea final y no usa un archivo temporal (usa una tubería y un proceso adicional que lo alimenta al menos en el puerto a Linux).
<<<
proviene del puerto Unix, rc
ya que no parece que el Plan9 lo rc
tenga.
rc
,<<<
(like<<
) utiliza un archivo temporal, por lo que puede ser utilizado por comandos quelseek
su stdin.