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:

 

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

La expansión de variables es muy útil a la hora de trabajar con las mismas en ksh, pues se pueden realizar acciones que de otro modo resultarían más engorrosas o pesadas. Solo vamos a ver las más sencillas.

Ejemplos:

$ PP="/usuarios/externos/tu/subdirectorio"
$ print ${PP:-Hola}
/usuarios/externos/tu/subdirectorio
$ print ${PPP:-Hola}
Hola
$ print ${PP:=Hola}
/usuarios/externos/tu/subdirectorio
$ PP=''
$ print ${PP:=Hola}
Hola
$ echo ${PP}
Hola
$ print ${PPPP:?Hola}
ksh: PPPP: Hola
$ print ${PPPP:+Hola}

$ print ${PP:+Hola}
Hola

$ PP="/usuarios/externos/tu/subdirectorio"
$ print "${PP#*/}"
usuarios/externos/tu/subdirectorio
$ print "${PP##*/}"
subdirectorio
$ print "${PP%/*}"
/usuarios/externos/tu
$ print "${PP%%/*}"

$ print "${PP%%*/}"
/usuarios/externos/tu/subdirectorio
$ print "${PP%%*/*}"


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.