Veuillez considérer ce script simple nommé test :
#!/bin/bash
echo $1
et les commandes et appels suivants:
$ echo "A B"
A B
$ echo ""A B""
A B
$ echo """A B"""
A B
$ echo """A B"""
A B
$ ./test "A B"
A B
$ ./test ""A B""
A
$ ./test """A B"""
A B
$ ./test """"A B""""
A
Quelqu'un pourrait-il expliquer pourquoi l'appel de test ne se comporte pas comme l' écho de la commande ou pointer vers la documentation pertinente?
shell-script
quoting
toliveira
la source
la source
printf '%q\n' "$@"
au lieu deecho
du tout, qui émettra vos arguments un à une avec des caractères cachés et des espaces échappés sous une forme visible.Réponses:
Parce que
echo
concatène tous ses arguments pour les imprimer, et votre script est limité au premier argument. Vous devez utiliser"$@"
et non$1
dans votre script.Examinons les arguments que vous fournissez pour vos tests:
./test "A B"
./test ""A B""
./test """A B"""
./test """"A B""""
Remarque: vous verriez des résultats différents
echo
si vous aviez utilisé plus d'un espace dans vos arguments. En effet, echo concatène ses arguments avec un seul espace:la source