2009-12-31 17 views
27

¿Cómo paso todos los argumentos de un script de shell a otro? He intentado con $ *, pero como esperaba, eso no funciona si tienes argumentos entre comillas.pasar argumentos entre scripts de shell pero conservar las comillas

Ejemplo:

$ 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 

lo quiero para imprimir:

apple 
pear orange 
banana 
+2

Véase también http://stackoverflow.com/questions/255898/ (pregunta ligeramente diferente, pero la respuesta es "$ @" igual que aquí). –

+0

¡Aprendí mucho de eso, gracias! – dogbane

Respuesta

30

Uso "[email protected]" en lugar de $* para preservar las comillas:

./script2.sh "[email protected]" 

Más información:

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

$ *
Todos los parámetros posicionales, vistos como una sola palabra

Nota: "$ *" debe ser citado.

$ @
Igual que $ *, pero cada parámetro es una cadena entre comillas, es decir, los parámetros se pasan intactos, sin interpretación o expansión. Esto significa, entre otras cosas, que cada parámetro en la lista de argumentos se ve como una palabra separada.

Nota: Por supuesto, debe citarse "$ @".

+0

Gracias, eso funcionó. – dogbane

+0

Tengo problemas con el paréntesis. Lo encontré y no pude resolverlo yo solo. – Penz

Cuestiones relacionadas