VARIABLES ESPECIALES
En UNIX existen unas variables especiales que pueden resultar útiles para conocer detalles sobre programas ejecutados, argumentos, etc.. Estas variables dependen de la shell utilizada, en el caso de ksh podemos destacar:
- $1 ... $9 : Argumentos pasados al programa. Si usamos las llaves "{}" para nombrar las variables el llimite se puede extender mucho más allá, pues ${11} es el undécimo argumento y no $1 y un 1.
- $0 : Nombre del programa que se está ejecutando.
- $# : Número de argumentos que se han pasado al programa.
- $* o $@ : Argumentos pasados al programa.
- $@ : Argumentos pasados al programa pero teniendo en cuenta su separación.
- $? : Valor devuelto por el último programa que se ha ejecutado.
- $! : Número de proceso del último proceso que se ejecuto en background.
- $$ : Número de proceso de la shell actual.
- ${#VARIABLE} : Devuelve la longitud de la variable VARIABLE, su número de caracteres.
- ${#VARIABLE[*]} : Devuelve la longitud del array con nombre VARIABLE, su número de elementos.
Veamos la diferencia entre $* y $@
$ set "1" "2" "a c" "b"
$ for i in $*
do
echo "$i"
done
1
2
a
c
b
$ for i in $@
do
echo "$i"
done
1
2
a
c
b
$ for i in "$*"
do
echo "$i"
done
1 2 a c b
$ for i in "$@"
do
echo "$i"
done
1
2
a c
b
Es recomendable, como ya he comentado antes, encerrar el nombre de las variables entre llaves "{}", aunque no obligatorio, para evitar problemas con variables de nombres similares.