Propagar todos los argumentos en un script de shell Bash

Resuelto Fragsworth asked hace 13 años • 12 respuestas

Estoy escribiendo un script muy simple que llama a otro script y necesito propagar los parámetros de mi script actual al script que estoy ejecutando.

Por ejemplo, el nombre de mi script es foo.shand call bar.sh.

foo.sh:

bar $1 $2 $3 $4

¿Cómo puedo hacer esto sin especificar explícitamente cada parámetro?

Fragsworth avatar Jan 28 '11 10:01 Fragsworth
Aceptado

Úselo "$@"en lugar de simple $@si realmente desea que sus parámetros se pasen de la misma manera.

Observar:

$ cat no_quotes.sh
#!/bin/bash
echo_args.sh $@

$ cat quotes.sh
#!/bin/bash
echo_args.sh "$@"

$ cat echo_args.sh
#!/bin/bash
echo Received: $1
echo Received: $2
echo Received: $3
echo Received: $4

$ ./no_quotes.sh first second
Received: first
Received: second
Received:
Received:

$ ./no_quotes.sh "one quoted arg"
Received: one
Received: quoted
Received: arg
Received:

$ ./quotes.sh first second
Received: first
Received: second
Received:
Received:

$ ./quotes.sh "one quoted arg"
Received: one quoted arg
Received:
Received:
Received:
Sdaz MacSkibbons avatar Jan 28 '2011 03:01 Sdaz MacSkibbons

Para bash y otros shells tipo Bourne:

bar "$@"
Chris Johnsen avatar Jul 06 '2010 23:07 Chris Johnsen

Uso "$@"(funciona para todos los compatibles con POSIX ).

[...] bash presenta la variable "$@", que se expande a todos los parámetros de la línea de comandos separados por espacios.

De Bash por ejemplo .

miku avatar Jan 28 '2011 03:01 miku