scripts script resueltos programacion pasar parametros español ejercicios ejemplos comandos shell scripting

resueltos - ¿Cuál es la diferencia entre $ @ y $*en scripts de shell?



scripts linux ejercicios resueltos (3)

En los scripts de shell, ¿cuál es la diferencia entre $@ y $* ?

¿Cuál es la forma preferida de obtener los argumentos del script?

¿Hay diferencias entre los diferentes intérpretes de shell sobre esto?



Desde here :

$ @ se comporta como $ *, excepto que cuando se cita, los argumentos se dividen correctamente si hay espacios en ellos.

Tome esta secuencia de comandos, por ejemplo (tomada de la respuesta vinculada):

for var in "$@" do echo "$var" done

Da esto:

$ sh test.sh 1 2 ''3 4'' 1 2 3 4

Ahora cambie "$@" a $* :

for var in $* do echo "$var" done

Y obtienes esto:

$ sh test.sh 1 2 ''3 4'' 1 2 3 4

(Respuesta encontrada al usar Google )


Una diferencia clave de mi POV es que "$ @" conserva la cantidad original de argumentos. Es la única forma que lo hace. Por esa razón, es muy útil para pasar discusiones con el script.

Por ejemplo, si el archivo my_script contiene:

#!/bin/bash main() { echo ''MAIN sees '' $# '' args'' } main $* main $@ main "$*" main "$@" ### end ###

y lo manejo así:

my_script ''a b c'' d e

Obtendré esta salida:

MAIN ve 5 args

MAIN ve 5 args

MAIN ve 1 args

MAIN ve 3 args