Pourquoi la commande md5sum <<< 'ddd'
(sortie :) est-elle d6d88f2e50080b9602da53dac1102762 -
correcte et md5sum << 'ddd'
non?
Qu'est-ce que ça <<<
veut dire?
Pourquoi la commande md5sum <<< 'ddd'
(sortie :) est-elle d6d88f2e50080b9602da53dac1102762 -
correcte et md5sum << 'ddd'
non?
Qu'est-ce que ça <<<
veut dire?
Réponses:
La <<<
commence une “chaîne ici”: la chaîne est développée et transmise au stdin du programme. (Dans votre cas, il n'y a pas beaucoup d'expansion en cours.) Cela équivaut à ceci:
echo ddd | md5sum
D'autre part, <<
commence un document ici. Toutes les lignes suivantes, jusqu’à une ligne contenant le marqueur ddd
, constitueront l’entrée du programme. (Vous devez utiliser un marqueur qui n’apparaîtra probablement pas dans vos données.) Vous pouvez obtenir le même effet que ci-dessus, comme ceci:
md5sum <<END
ddd
END
Il y a une différence entre <<END
et <<'END'
: sans les guillemets, toutes les variables, séquences d'échappement, etc. du document ici seront étendus comme d'habitude.
<<<
introduit une chaîne here : la chaîne suivante <<<
est transmise en entrée à la commande. Cela provient du port de Byron Rakitzis rc
(un shell Plan 9) vers Unix, et est également présent dans zsh, ksh93 et bash.
<<
introduit un document here : les lignes suivantes du script shell sont passées en entrée de la commande et la chaîne suivante <<
est un terminateur. Ici, les documents fonctionnent dans tous les shells Bourne (Bourne, POSIX, Ash, Bash, Ksh, Zsh,…), Shells de style C (csh, tcsh) et Shells Plan 9 (rc, es).
<<<
n'est pas une ksh
extension, le chemin est rc
-> zsh
-> ksh93
-> bash
(les ksh
notes de version accusent réception du emprunt pour une fois zsh
). <<
travaille aussi dans le rc
style des coquillages
rc
et zsh
<<<
même si cela rc
n'inclut pas un caractère de fin de ligne et n'utilise pas de fichier temporaire (utilise un canal et un processus supplémentaire le chargeant au moins dans le port vers Linux).
<<<
du port Unix, rc
car il ne semble pas que le Plan9 l’ rc
ait.
rc
,<<<
(comme<<
) utilise un fichier temporaire et peut donc être utilisé par des commandes qui utilisentlseek
leur stdin.