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?
Con $ @ cada parámetro es una cadena entre comillas. De lo contrario, se comporta de la misma manera.
Ver: http://tldp.org/LDP/abs/html/internalvariables.html#APPREF
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