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

Algunas observaciones respecto a variables definidas por el usuario:
1. Definición y uso:
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:
3. Inicialización/Modificación del valor de una variable:
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"
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)
echo "$PATH"
echo "$PS1"
echo "${HOME}"
echo "${HOME}work"
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.
set #OR env #OR printenv
El shell establece las siguientes variables:


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:


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


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
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
![]()
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 entrecomillado de una cadena vacía ( '' o ") genera una palabra vacía (palabra que no tiene ningún carácter).