pasar argumentos entre los scripts de shell, pero mantienen las cotizaciones
-
22-09-2019 - |
Pregunta
¿Cómo pasar todos los argumentos de una secuencia de comandos shell en otro? He tratado de $ *, pero como era de esperar, que no funciona si ha citado argumentos.
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
Solución
Uso "$@"
en lugar de $*
para preservar las comillas:
./script2.sh "$@"
Más información:
http://tldp.org/LDP/abs/html/internalvariables.html
$ *
Todos los parámetros posicionales, visto como una sola palabraNota: "$ *" deben mencionarse
$ @
Igual que $ *, pero cada parámetro es una cadena entre comillas, es decir, la los parámetros se pasan en intacto, sin interpretación o expansión. Esto significa, entre otras cosas, que cada parámetro en el argumento la lista es visto como una palabra separada.Nota:. Por supuesto, "$ @" debe citarse