Saltar al contenido principal
Página

Tema 2.3 - Variables y Entrecomillado

Las variables del intérprete BASH pueden considerarse desde los siguientes puntos de vista:

  • Las variables locales son definidas por el usuario y se utilizan únicamente dentro de un bloque de código, de una función determinada o de un guion.
  • Las variables de entorno son las que afectan al comportamiento del intérprete y al de la interfaz del usuario.
  • Los parámetros de posición son los recibidos en la ejecución de cualquier programa o función, y hacen referencia a su orden ocupado en la línea de mandatos.
  • Las variables especiales son aquellas que tienen una sintaxis especial y que hacen referencia a valores internos del proceso. Los parámetros de posición pueden incluirse en esta categoría.


VARIABLES DEFINIDAS POR EL USUARIO (LOCALES)

El shell permite realizar las siguientes operaciones básicas con las variables



Algunas observaciones respecto a variables definidas por el usuario:

1. Definición y uso:

  • Las variables sólo existen en el proceso shell en que son definidas (locales al proceso).
  • Las variables sólo son accesibles desde el momento de su definición hacia abajo del script, esto es, siempre deben definirse primero e invocarse después (no puede usarse una variable que es definida más adelante). Pueden utilizarse también dentro de funciones aunque se hayan declarado fuera de ellas. En el estándar POSIX todas las variables son globales, aunque existen variantes (como bash) que permiten la creación de variables locales a las funciones.


No es necesario definir las variables previamente a su uso, ya que se crean al asignarles la primera vez un valor. Al definir una variable sin inicialización, su valor por omisión es la cadena nula, esto es, las siguientes entradas son equivalentes:

VAR=
VAR=""


2. Nombrado:

téngase en cuenta que Linux es "case sensitive" (sensible a mayúsculas y minúsculas) en general, lo que incluye el nombre de las variables. Así, VAR y var serán tomadas como dos variables independientes. Para el nombre de una variable puede usarse:

  • 1er carácter: una letra o el carácter de subrayado _.
  • 2º y posteriores caracteres: una letra, dígito o el carácter de subrayado.


3. Inicialización/Modificación del valor de una variable:

  • Es importante no incluir ningún espacio ni antes ni después del signo =. Si se hace, el shell intentará interpretar el nombre de la variable como un comando (recuerde que la sintaxis del shell es especialmente estricta en lo que a espacios se refiere).
  • El valor de una variable siempre es tomado por el shell como una cadena de caracteres.
  • Si el valor de una variable contiene caracteres especiales, espacios, u otros elementos que puedan ser malinterpretados por el shell, tendrá que ir entrecomillado o deberá incluir el carácter de escape donde sea necesario.


4. Expansión de una variable:

el uso de las llaves {} sólo es necesario si justo tras el nombre de la variable se desean escribir más caracteres, sin añadir ningún espacio antes.

¿Cómo se lee y escribe en las variables en Bash? Para escribir en una variable lo harás de la siguiente forma:

variable=valor

Es importante que no haya espacios ni entre la variable y el signo igual, ni entre el signo igual y el valor que quieres asignar a tu variable.

Mientras que para leer el valor de esa variable antepondrás un signo $. De esta forma, para nuestra variable anterior, tendrías lo siguiente:

echo "$variable"


¿Cómo muestro el valor de una variable?

Debe usar $ seguido del nombre de la variable para imprimir el contenido de una variable.

Use el comando echo para mostrar el valor de una variable, echo escribe cada una de las cadenas dadas en su salida estándar, con un espacio en blanco entre cada una y un carácter "salto de línea" después de la última cadena.

OPCIONES

-n     No enviar el carácter "salto de línea" al final.
-e     Activa la interpretación en las cadenas de los siguientes caracteres precedidos por una barra invertida:

\a     alarma (timbre)
\b     espacio atrás
\c     suprime el "salto de línea" final
\f     salto de página
\n     salto de línea
\r     retorno de carro
\t     tabulado horizontal
\v     tabulado vertical
\\     barra invertida
\nnn   el carácter cuyo código ASCII es nnn (en octal)


Para mostrar la ruta de búsqueda del programa, escriba
echo "$PATH"

Para mostrar su configuración de solicitud, escriba:
echo "$PS1"

El nombre de la variable también puede estar entre llaves:
echo "${HOME}"

Esto es útil cuando el nombre de la variable va seguido de un carácter que podría ser parte de un nombre de variable, por ejemplo:
echo "${HOME}work"


Variables de Entorno

Este tipo de variables (con la excepción de auto_resume e histchars) se definen en LETRAS MAYÚSCULAS. Puede configurar aspectos del shell modificando variables del sistema como PS1, PATH, LANG, HISTSIZE y DISPLAY, etc.


Para ver todas las variables del sistema puede ingresar el siguiente comando:
set
#OR
env
#OR
printenv


Variables de Entorno comúnmente utilizadas

El shell establece las siguientes variables:



Parámetros posicionales

Cuando ejecutamos un shell script puede ser útil pasarle argumentos o parámetros a dicho script (por ejemplo, el nombre del fichero sobre el cual queremos que el script trabaje o procese. Estos parámetros son referidos al script de acuerdo a la posición que toman en la línea de comandos: $0 es el nombre del comando o script en sí mismo, $1 es el primer parámetro, $2 es el segundo, y así sucesivamente. No podemos cambiar los valores de esas variables porque son un caso especial (normalmente las variables no pueden comenzar con un dígito, por lo que el shell no interpreta “1=hola” como una asignación de variable).

Un script no puede saber cuántos parámetros posicionales utilizará, por lo que si no controlamos la entrada adecuada de los mismos es probable que el script no trabaje como esperamos.




Ejemplo:



Parámetros especiales

Son parámetros identificados por un carácter especial creados por el Shell y cuyo valor no puede ser modificado directamente.




Exportación de variables

Cuando un proceso (proceso padre, como por ejemplo el shell) ejecuta otro proceso (proceso hijo, otro programa o script), el proceso padre, además de los parámetros habituales, le pasa un conjunto de variables de entorno al proceso hijo (cada lenguaje de programación tiene su método propio para obtenerlas y modificarlas). Las variables de entorno pasadas pueden ser utilizadas por el proceso hijo para modificar su comportamiento.

El comando interno del shell export permite que una variable (previamente definida o no) sea configurada para que su valor sea copiado a los procesos hijos que sean creados desde el shell actual (por ejemplo otros shell). Presenta la sintaxis:

export VAR
export VAR=valor


Debe advertirse que "exportación" significa "paso de parámetros por valor", esto es, en el proceso hijo se creará una variable de igual nombre que en el shell padre, y con igual valor, pero serán variables independientes (esto es, la modificación de valor de la variable en el proceso hijo no afectará al valor de la variable en el shell padre). El proceso hijo no puede crear ni modificar variables del proceso padre.

Por ejemplo:

Tenemos un script sc_padre.sh en el cual definimos dos variables, la primera foo y la segunda bar que a su lado va incluida la etiqueta export lo cual indica que esa variable será exportada, al final hacemos el llamado al script hijo



El script hijo tiene la siguiente estructura


En el script hijo mediante el comando echo mostraremos el mensaje de la segunda línea y el valor de las dos variables

Ahora ejecutaremos el script padre:


Obteniendo como resultado, el mensaje que indicamos en el hijo, un espacio en blanco debido a que la variable foo no fue exportada por lo tanto no tiene ningún valor contenido en esta, y el valor de la variable bar



Entrecomillado Shell


Es importante que tengas en cuenta que en Bash no todas las comillas son iguales. No es lo mismo las simples que las dobles comillas.  Con las comillas simples se guarda en la variable literalmente lo que hay entre ellas. Con las comillas dobles se interpreta el contenido.

Fíjate, bien en este par de ejemplos. Primero con comillas simples,


Obteniendo como respuesta


Es decir, que a variable2 le has asignado estrictamente su contenido.

En cambio, si utilizamos comillas dobles:


Obtenemos



Entrecomillado y carácter de escape

El shell tiene una lista de caracteres que trata de manera especial (operadores) y una serie de palabras reservadas (palabras que tienen un significado especial para el Shell).

Cuando queremos utilizar un carácter especial del shell o una palabra reservada del lenguaje sin que sea interpretada como tal o prevenir una expansión o sustitución es necesario indicárselo al shell mediante las comillas (simples o dobles) o el carácter de escape. Por ejemplo, para escribir el nombre de un fichero que contenga espacios, para pasar el símbolo < como argumento a un programa.

  • El carácter de escape \ : indica que el siguiente carácter debe preservar su valor literal. El carácter de escape se elimina de la línea una vez procesado. Si aparece al final de una línea, significa "continuación de línea" e indica que el comando continúa en la siguiente línea (puede ser utilizado para dividir líneas muy largas).
  • Comillas simples ' ' : todo texto ‘entrecomillado’ con comillas simples mantendrá su valor literal, no se producirá ninguna expansión ni sustitución y será considerado como una única palabra.
  • Comillas dobles ": es equivalente a usar comillas simples, salvo que en este caso sí se hacen expansiones y sustituciones (todas menos las expansiones de tilde y ruta y la sustitución de alias).

El entrecomillado de una cadena vacía ( '' o ") genera una palabra vacía (palabra que no tiene ningún carácter).


Última modificación: lunes, 11 de mayo de 2020, 22:12