Me gusta almacenar todos los argumentos de la línea de comandos en un script bash en una sola variable
-
20-08-2019 - |
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?
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.