passer des arguments entre les scripts shell mais conservent des citations
-
22-09-2019 - |
Question
Comment passer dois-je tous les arguments d'un script shell dans une autre? J'ai essayé $ *, mais comme je m'y attendais, cela ne fonctionne pas si vous avez cité des arguments.
Exemple:
$ cat script1.sh
#! /bin/sh
./script2.sh $*
$ cat script2.sh
#! /bin/sh
echo $1
echo $2
echo $3
$ script1.sh apple "pear orange" banana
apple
pear
orange
Je veux qu'il imprimer:
apple
pear orange
banana
La solution
Utilisez "$@"
au lieu de $*
pour préserver les citations:
./script2.sh "$@"
Plus d'infos:
http://tldp.org/LDP/abs/html/internalvariables.html
$ *
Tous les paramètres de position, considérée comme un seul motNote: "$ *" doit être cité
$ @
Même chose que $ *, mais chaque paramètre est une chaîne entre guillemets, qui est, le les paramètres sont transmis intacts, sans interprétation ou d'expansion. Cela signifie, entre autres, que chaque paramètre dans l'argument la liste est considérée comme un mot distinct.Note:. Bien sûr, devrait être cité "$ @"