echo
Une echo
implémentation strictement conforme à la spécification Single Unix ajoutera de nouvelles lignes si vous:
echo 'line1\nline2'
Mais ce n'est pas un comportement fiable. En fait, il vraiment ne importe quel comportement standard que vous pouvez attendre de echo
.
OPERANDS
string
Une chaîne à écrire sur la sortie standard. Si le premier opérande est -n
ou si l'un des opérandes contient un caractère < \
barre oblique inverse> , les résultats sont définis par l'implémentation .
Sur les systèmes conformes à XSI , si le premier opérande est -n
, il doit être traité comme une chaîne et non comme une option . Les séquences de caractères suivantes doivent être reconnues sur les systèmes conformes à XSI dans tous les arguments:
\a
- Ecrivez une <alerte> .
\b
- Ecrivez un <backspace> .
\c
- Supprimez la <nouvelle ligne> qui suit sinon le dernier argument de la sortie. Tous les caractères suivant les \c
arguments doivent être ignorés.
\f
- Ecrivez un <formulaire> .
\n
- Ecrivez une <nouvelle ligne> .
\r
- Ecrivez un <retour-chariot> .
\t
- Ecrivez un <tab> .
\v
- Ecrivez un <vertical-tab> .
\\
- Écrivez un caractère <barre oblique inverse> .
\0num
- Écrivez une valeur sur 8 bits représentant le nombre octal zéro, un, deux ou trois chiffres num
.
Et donc il n’existe vraiment aucun moyen général de savoir écrire une nouvelle ligne echo
, si ce n’est que vous pouvez généralement vous fier echo
à cela.
Un bash
shell n’est généralement pas conforme à la spécification et gère les -n
options, ainsi que d’autres options, mais même cela reste incertain. Tu peux faire:
shopt -s xpg_echo
echo hey\\nthere
hey
there
Et même pas nécessaire si bash
a été construit avec l'option de construction ...
--enable-xpg-echo-default
Faites en echo
sorte que les caractères intégrés par défaut utilisent une barre oblique inversée par défaut, sans nécessiter d’ -e
option. Ceci définit la valeur par défaut de l' xpg_echo
option shell sur on
, ce qui permet au echo
comportement de Bash de se comporter davantage comme la version spécifiée dans Single Unix Specification, version 3. Pour plus d'informations sur les séquences d'échappement reconnues , voir Bash Builtinsecho
.
printf
Par contre, printf
le comportement de ce dernier est assez docile en comparaison.
RAISONNEMENT
L' printf
utilitaire a été ajouté pour fournir une fonctionnalité qui a toujours été fournie par echo
. Cependant, en raison de différences irréconciliables entre les différentes versions d’ echo
existant, la version présente peu de fonctionnalités spéciales, ce qui les laisse à ce nouvel printf
utilitaire, qui est basé sur celui du système Ninth Edition.
La section DESCRIPTION EXTENDUE correspond presque exactement à la printf()
fonction de la norme ISO C, bien qu'elle soit décrite en termes de notation de format de fichier dans la notation de format de fichier XBD .
Il gère les chaînes de format qui décrivent ses arguments - ce qui peut être n'importe quel nombre de choses, mais les chaînes sont en %b
gros des chaînes yte ou des chaînes littérales %s
. À part les %f
ormats dans le premier argument, il se comporte presque comme un %b
argument de chaîne yte, sauf qu'il ne gère pas l' \c
échappement.
printf ^%b%s$ '\n' '\n' '\t' '\t'
^
\n$^ \t$
Voir Pourquoi est printf
meilleur que echo
? pour plus.
echo() printf
Vous pourriez écrire vos propres normes conformes echo
comme ...
echo(){
printf '%b ' "$@\n\c"
}
... ce qui devrait presque toujours faire la bonne chose automatiquement.
En fait, non ... Cela affiche un littéral \n
à la fin des arguments si le dernier argument se termine par un nombre impair de <barres obliques inverses> .
Mais cela ne veut pas:
echo()
case ${IFS- } in
(\ *) printf %b\\n "$*";;
(*) IFS=\ $IFS
printf %b\\n "$*"
IFS=${IFS#?}
esac
echo
obligatoire? vous pouvez utiliserprintf
.