Veuillez expliquer pourquoi 1 4 5 6 est affiché pour les quatre dernières déclarations d'écho? J'ai frappé cela par accident une fois, mais je suis maintenant curieux de savoir pourquoi ce comportement se produit.
Ces déclarations fonctionnent comme prévu (pour moi).
$ echo [ 9876543210 ]
[ 9876543210 ]
$ echo [237890]
[237890]
Ces déclarations d'écho affichent systématiquement 1 4 5 6. Y a-t-il quelque chose de spécial à propos de ces nombres?
$ echo [9876543210]
1 4 5 6
$ echo [abcd9876543210ghi]
1 4 5 6
$ echo [-123456-]
1 4 5 6
$ echo [-7654321-]
1 4 5 6
Merci!
- Le doublon possible est lié et utile, mais pas un doublon. Le doublon possible est du point de vue d'une
rm
commande. Cette question est du point de vue d'un "comportement étrange" perçu d'uneecho
commande. La réponse sous-jacente pour les deux est la globalisation. Quelqu'un recherchant des problèmes avec uneecho
commande ne trouverait pas facilement larm
question, mais atterrirait probablement ici.
1
4
5
et6
nullglob
, votre deuxième exemple (echo [237890]
) n'imprimera en fait rien, ce qui aurait pu être un indice que vous voyiez glob-expansion dans les autres exemples.Réponses:
La parenthèse ouverte
[
est un caractère spécial à la coquille; il ouvre un algorithme de correspondance de modèle qui dit "correspondre à l'un des caractères à l'intérieur des crochets". Parce que vous avez 4 fichiers nommés: 1, 4, 5 et 6 dans votre répertoire actuel, lorsque les caractères à l'intérieur des crochets contiennent l'un de ces chiffres, votre shell remplace la correspondance de modèle par ces noms de fichiers. Lorsque vous utilisez à la placeecho [ 9876543210 ]
que vous appelez écho avec 3 paramètres:[
,9876543210
et]
.Vous devez citer les paramètres de votre instruction echo pour empêcher le shell de le voir comme une demande de correspondance de modèle.
(ou supprimez les fichiers nommés 1, 4, 5 et 6 - mais c'est une solution de contournement pour démontrer le comportement, pas un correctif).
la source
echo [ 987 ]
appelsecho
à trois paramètres plutôt que de mentionnertest
?echo
est interprété différemment enbash
fonction de la présence ou non d'espaces entre les crochets et de leur contenu.[123]
par rapport à[ 123 ]
.