5.1.- Comparación de las variables $* y $@

Lo vemos con un ejemplo:

Uso de “$*”

Las comillas dobles eliminan el significado especial de los espacios que están dentro de $*.

Ejemplo

En este script “test_var2“, la variable $* se encuentra entre comillas dobles.

En la primera etapa el shell actual trata los caracteres de protección antes de ejecutar el script. A este nivel los espacios internos en “d e f” se protegen y no son vistos como separadores de palabras, sino como caracteres cualquiera.

En la segunda etapa, el shell hijo interpreta el script sustituido “$*” por “a b c d e f g”. Las comillas dobles alrededor de $* protegen todos los espacios internos. Por lo tanto, éstos son vistos como caracteres regulares.

En cambio para el shell hijo, sólo hay un argumento.

Uso de “$@”

Si ponemos la variable $@ entre comillas dobles permite conservar la protección realizada a nivel del shell de trabajo.

Ejemplo

En el script test_var3, la variable $@ se coloca entre comillas dobles.

Veamos el resultado de la llamada al script:

En la primera etapa, el shell en ejecución trata los caracteres de protección antes de ejecutar el script. A este nivel, los espacios internos en “d e f” se protegen y no son vistos como separadores de palabras, sino como caracteres cualquiera.

En la segunda etapa, el shell hijo interpreta el script ya sustituido “$@” por a b c “d e f” g. La protección de los espacios internos en d e f se conserva por el shell hijo.

Para el shell hijo, hay cinco argumentos. Tal y como se ha visto anteriormente.

Anuncios