Quelle est la différence entre l'utilisation
echo -e "Hello\nWorld"
et
echo $"Hello\nWorld"
ne sortent-ils pas tous les deux:
Hello
World
command-line
bash
marque
la source
la source
Hello\nWorld
. Vous avez besoin du-e
commutateur pour interpréter les caractères d'échappement.echo $'Hello\nWorld'
, qui s'imprimeront sur deux lignes sous bash.Réponses:
echo -e
etecho $'...'
sont tous deux similaires en ce qu'ils prennent en charge les séquences d'échappement suivantes:Ils ont des différences. En plus de ce qui précède,
echo -e
prend en charge:En revanche,
$'....'
prend en charge:Notez que, entre les deux, les
\c
extensions sont incompatibles:Pour
echo -e
ci-dessus,\c
supprime la sortie supplémentaire, ignorant ainsi leIstop
. En revanche, pour$'...'
, le\cI
est interprété comme un onglet.La forme visuellement similaire:
$"..."
En revanche
$'...'
, la fonction de$"..."
est assez différente. Cela entraînera la traduction de la chaîne qu'il contient en fonction des paramètres régionaux actuels.La
echo -e
controverseecho -e
n'est pas universellement pris en charge par les coques et beaucoup considèrent l'-e
option comme une erreur de conception. Observer:Comme vous pouvez le voir, si ce que vous imprimez
echo
commence par un tiret, les résultats peuvent être inattendus. À moins que vous ne soyez sûr que la première chaîne avec laquelle vous imprimerezecho
ne commence pas par un tiret, il vaut mieux utiliserprintf
.Pour ces raisons, la norme POSIX conclut :
Chet Ramey, qui maintient
bash
depuis 22 ans, convient :la source
printf
plutôt queecho
*
) n'est pas spécifique àecho
. Cela se produit avec n'importe quelle commande qui reconnaît les options courtes ou longues (écrites de manière traditionnelle) et prend les opérandes de nom de fichier, y comprisls
. On peut dire que la situation est un peu pire avececho
puisque (comme votre source le mentionne)echo
n'accepte généralement pas--
d'indiquer la fin des options, alors que l'on peut écrire des commandes commels -- *l
. (Et vraiment, il faut généralement écrire des commandes de cette façon, lorsque vous utilisez des globes qui commencent par*
ou-
, en particulier dans les scripts.)\n
séquence d'échappement, donc en fait , il n'a pas d' importance si je l' utiliseecho -e '...'
,echo $'...'
ouecho $"..."