Me gusta almacenar todos los argumentos de la línea de comandos en un script bash en una sola variable

StackOverflow https://stackoverflow.com/questions/841670

Pregunta

Digamos que tengo un script bash llamado foo.sh .

Me gustaría llamarlo así

foo.sh Here is a bunch of stuff on the command-line

y me gustaría almacenar todo ese texto en una sola variable e imprimirlo.

Entonces mi salida sería:

Here is a bunch of stuff on the command-line

¿Cómo haría esto?

¿Fue útil?

Solución

echo "$*"

haría lo que quisiera, es decir, imprimir todos los argumentos de la línea de comandos, separados por un espacio (o, técnicamente, cualquiera que sea el valor de $IFS). Si quisieras almacenarlo en una variable, podrías hacerlo

thevar="$*"

Si eso no responde a su pregunta lo suficientemente bien, no estoy seguro de qué más decir ...

Otros consejos

Si desea evitar involucrar a $ IFS, use $ @ (o no incluya $ * entre comillas)

$ cat atsplat
IFS="_"
echo "     at: $@"
echo "  splat: $*"
echo "noquote: "$*

$ ./atsplat this is a test
     at: this is a test
  splat: this_is_a_test
noquote: this is a test

El comportamiento de IFS también sigue a las asignaciones de variables.

$ cat atsplat2
IFS="_"
atvar=$@
splatvar=$*
echo "     at: $atvar"
echo "  splat: $splatvar"
echo "noquote: "$splatvar

$ ./atsplat2 this is a test
     at: this is a test
  splat: this_is_a_test
noquote: this is a test

Tenga en cuenta que si la asignación a $ IFS se hiciera después de la asignación de $ splatvar, entonces todas las salidas serían iguales ($ IFS no tendría efecto en el " atsplat2 " ejemplo) .

Eche un vistazo a la variable $*. Combina todos los argumentos de la línea de comandos en uno.

echo "$*"

Esto debería hacer lo que quieras.

Más información aquí.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top