Vous pouvez rediriger tout ce que vous voulez, echo
mais cela ne fera rien. echo
ne lit pas son entrée standard. Tout ce qu'il fait est d'écrire dans la sortie standard ses arguments séparés par un caractère d'espacement et terminés par un caractère de nouvelle ligne (et avec certaines echo
implémentations contenant des séquences d'échappement développées et / ou des arguments commençant par -
éventuellement traités comme des options).
Si vous souhaitez echo
afficher le contenu d'un fichier, vous devez transmettre ce contenu en tant qu'argument echo
. Quelque chose comme:
echo "$(cat my_file.txt)"
Notez que des $(...)
bandes le caractère de nouvelle ligne de fuite s de la sortie de cette cat
commande, et echo
ajoute un retour.
Notez également que, sauf avec zsh
, vous ne pouvez pas transmettre de caractères NUL dans les arguments d'une commande, de sorte que l'opération ci-dessus ne fonctionnera généralement pas avec les fichiers binaires. yash
supprimera également les octets qui ne font pas partie des caractères valides.
Si la raison de vouloir le faire parce que vous voulez echo
à étendre \n
, \b
, \0351
... des séquences d'échappement dans le fichier (comme UNIX conforme à l ' echo
implémentations font, mais pas tous ), alors vous préférez utiliser à la printf
place :
printf '%b\n' "$(cat my_file.txt)"
Contrairement à echo
, celui-ci est portable et n'aura pas de problèmes si le contenu du fichier commence par -
.
Comme alternative à $(cat file)
, avec ksh
, zsh
et bash
, on peut aussi le faire:$(<file)
. C'est un opérateur spécial dans lequel le shell, par opposition à, cat
lit le contenu du fichier pour constituer l'extension. Il supprime toujours les sauts de ligne et les indentations de fin sur les octets NUL sauf dans zsh
. En bash
, cela impose encore un processus supplémentaire. Notez également qu'une différence est que vous n'obtiendrez aucune erreur si vous essayez de lire un fichier de type répertoire de cette façon. En outre, while $(< file)
est spécial, $(< file; other command)
non (dans le cas zsh
où, sans émuler un autre shell, le contenu de la bibliothèque serait développé file
, en exécutant la commande implicite $READNULLCMD
(généralement un pager)).
echo
?