Entendiendo la diferencia entre $@ y $*
Las variables especiales $@
y $*
se utilizan para representar todos los argumentos de la línea de comandos, pero se comportan de manera diferente cuando se encierran entre comillas dobles. Creemos un script para demostrar esta diferencia.
- Crea un nuevo archivo llamado
at_vs_star.sh
:
touch ~/project/at_vs_star.sh
- Abre el archivo en el editor del WebIDE y agrega el siguiente contenido:
#!/bin/bash
echo "Using \$@:"
for arg in "$@"; do
echo "Argument: $arg"
done
echo "Using \$*:"
for arg in "$*"; do
echo "Argument: $arg"
done
Este script demuestra la diferencia entre $@
y $*
cuando se utilizan en un bucle.
- Guarda el archivo y hazlo ejecutable:
chmod +x ~/project/at_vs_star.sh
- Ejecuta el script con múltiples argumentos, incluyendo algunos con espacios:
./at_vs_star.sh "arg with spaces" another_arg "third arg"
Deberías ver una salida similar a esta:
Using $@:
Argument: arg with spaces
Argument: another_arg
Argument: third arg
Using $*:
Argument: arg with spaces another_arg third arg
Esto es lo que está sucediendo:
- Con
"$@"
, cada argumento se trata como una entidad separada. Los argumentos con espacios se conservan como unidades individuales.
- Con
"$*"
, todos los argumentos se combinan en una sola cadena, separados por el primer carácter de la variable IFS (Internal Field Separator, separador de campos interno), que por lo general es un espacio.
Esta diferencia es crucial cuando necesitas procesar argumentos que pueden contener espacios u otros caracteres especiales.