2009-12-31 18 views
27

Come passare tutti gli argomenti di uno script di shell in un altro? Ho provato $ *, ma come mi aspettavo, che non funziona se hai citato argomenti.passare argomenti tra script di shell ma mantenere le virgolette

Esempio:

$ 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 

voglio che stampare:

apple 
pear orange 
banana 
+2

Vedere anche http://stackoverflow.com/questions/255898/ (domanda leggermente diversa - ma la risposta è "$ @" proprio come qui). –

+0

Ho imparato molto da questo, grazie! – dogbane

risposta

30

Uso "[email protected]" invece di $* per preservare le virgolette:

./script2.sh "[email protected]" 

Maggiori informazioni:

http://tldp.org/LDP/abs/html/internalvariables.html

$ *
Tutti i parametri posizionali, visti come un'unica parola

Nota: "$ *" deve essere citato.

$ @
Uguale a $ *, ma ogni parametro è una stringa tra virgolette, cioè i parametri sono passati intatti, senza interpretazione o l'espansione. Ciò significa, tra le altre cose, che ogni parametro nella lista argomento è visto come una parola separata.

Nota: Naturalmente, "$ @" deve essere indicato.

+0

Grazie, ha funzionato. – dogbane

+0

Io che ho problemi con la parentesi - mi sono imbattuto in esso e non sono riuscito a risolverlo da solo. – Penz

Problemi correlati