¿Qué son las variables de Bash y cómo puedes usarlas?

Una fotografía de una persona programando usando una laptop.

Bash te permite asignar cadenas de texto completas a variables individuales, simplificando su uso y la escritura de scripts. ¿Cómo funcionan y cómo puedes usarlas? Vamos a averiguarlo.

Tabla de Contenidos

  • ¿Qué es una variable de Bash?
  • Variables en tiempo real
  • Variables en scripts
  • Variables de Bash permanentes y alias
  • Creando arreglos
  • Ejecutando variables de subshell
  • Manipulación de subcadenas
  • Preguntas frecuentes

¿Qué es una variable de Bash?

Las variables son nombres fáciles de recordar que pueden contener diferentes valores alfanuméricos. Son útiles, ya que permiten aplicar la misma función a diferentes valores, sin tener que reescribir un script/pieza de código. También facilitan la escritura del script/pieza de código, ya que en lugar de tratar con valores individuales, puedes usar el mismo nombre para todos ellos.

Variables en tiempo real

Bash permite el uso de variables. Puedes crear variables sobre la marcha y reutilizarlas durante tu sesión actual de Bash. Pueden ayudar en tu uso de Bash de muchas maneras diferentes y desaparecerán después de que termine la sesión actual.

Por ejemplo, supongamos que estás visitando un montón de sitios. Podrías estar investigando o raspando datos y crear la siguiente variable:

sitea=https://www.maketecheasier.com

Una terminal mostrando una asignación básica de variable.

Después de eso, si quisieras visitar nuestro sitio con Firefox, podrías simplemente escribir:

firefox $sitea

Una terminal mostrando una variable como argumento para un programa.

Mucho más fácil – y más legible. La variable $sitea permanecería asignada al sitio hasta que cambiaras su contenido manualmente o la sesión de Bash terminara. Y, por supuesto, puedes crear más variables, como siteb, sitec y sited.

Al configurar nuevas variables, puedes usar cualquier nombre que desees y almacenar cualquier cadena alfanumérica dentro de ellas. Ten en cuenta, sin embargo, que son sensibles a mayúsculas y minúsculas por defecto. Así, $sitea no sería lo mismo que $SiteA. Además, ten en cuenta que debes usar comillas al almacenar cadenas con caracteres especiales dentro de ellas (incluidos los espacios).

Consejo: para aquellos que son nuevos en Bash, comienza con estos comandos básicos de Bash.

Variables en scripts

Las variables en Bash son más útiles al escribir scripts, ya que te permiten escribir un solo script, que luego puede iterar a través de diferentes cadenas o actuar sobre piezas de datos personalizadas. Supongamos que estás escribiendo un script que todos podrían usar en su computadora, pero que cada vez mostraría un saludo personalizado. Sin variables, tendrías que escribir una versión diferente del script para cada usuario. Con variables, mantienes el script igual y solo cambias el nombre del usuario.

Un script así se vería algo como lo siguiente:

#!/bin/bash  

username=Ramces  
echo$username

Una terminal mostrando un script básico de asignación de variables.

El ejemplo anterior puede parecer redundante; sin embargo, a medida que aumenta la complejidad del código, las variables se vuelven indispensables. Un script podría tener cientos o miles de líneas y contener el nombre del usuario en diferentes lugares. Para entenderlo mejor, considera el siguiente script algo diferente:

#!/bin/bash  

username=Linus  
echo Hola $username. Este es un script simple que escribí que repetirá tu nombre - es decir, $username - a menudo como un ejemplo real de cómo usar variables de Bash. Espero que te ayude a entender cómo usar variables para mejorar tu flujo de trabajo en Bash, $username. En este caso, la variable username está asignada a tu nombre. Cada vez que Bash se encuentra con ella, la reemplaza con $username.

Una terminal mostrando un script básico con múltiples sustituciones de variables.

El script anterior utilizará el nombre definido como la variable username para completar el texto. Si usas el nombre real del usuario, tendrías que escribirlo cuatro veces, luego hacer lo mismo para el siguiente usuario, y otras cuatro veces para el siguiente. Una y otra vez. Al asignarlo a una variable, solo tienes que cambiarlo una vez por cada usuario, y cada mención del nombre del usuario en el texto se actualizará.

Bueno saber: además de las variables, también puedes usar el bucle for en Bash.

Variables de Bash permanentes y alias

Vimos cómo puedes establecer variables temporalmente y cómo, para algo más permanente, puedes incluirlas en tus propios scripts. También puedes establecer variables permanentemente en Bash editando el archivo “~/.bashrc”.

  1. Abre el archivo “~/.bashrc” en tu editor de texto favorito.
nano ~/.bashrc
  1. Te sugerimos que comiences con una prueba, solo agregando una sola variable, para que sepas dónde mirar si el proceso no funciona. Ve al final del archivo y, en una nueva línea, agrega tu variable.
myname="Ramces Red"

Una terminal mostrando una nueva variable permanente dentro del archivo bashrc.

  1. Guarda tu archivo y sal del editor. Los cambios no se aplicarán de inmediato. Ingresa lo siguiente en tu terminal para que surta efecto:
source ~/.bashrc
  1. Utiliza la nueva variable establecida en tu sesión de Bash:
echo$myname

Puedes configurar tantas variables como desees y simplificar enormemente tus aventuras diarias en Bash.

Para un impulso extra en productividad, también vale la pena configurar un tipo diferente de variable: alias. A diferencia de las variables típicas, que están asignadas a datos que puedes usar en comandos, los alias se utilizan en lugar de comandos reales.

Así como puedes usar una variable fácil de recordar para contener cadenas largas de texto, puedes usar alias como alternativas fáciles a comandos complejos. Puedes averiguar más sobre ellos aquí, donde convertimos un comando completo de compresión de 7zip en un alias de dos caracteres.

Por último, incluso si has establecido permanentemente una variable en .bashrc, puedes reasignarle un valor diferente temporalmente, como vimos antes. La variable presentará el nuevo contenido hasta que termine la sesión actual de Bash (después de cerrar sesión o reiniciar) o vuelvas a cargar el archivo .bashrc.

Creando arreglos

Mientras que la mayoría de los usuarios de Bash piensan en variables como un enlace simple entre un dato y una etiqueta, también es posible usarlas como un marcador para arreglos. Estos son un tipo de estructura de datos que puede almacenar múltiples valores en un formato de índice numerado. Para crear un arreglo, sigue los pasos a continuación:

  1. Crea un script de shell vacío:
nano array.sh
  1. Usa el subcomando declare para inicializar el arreglo de Bash en el proceso de shell actual.
declare-a myarray

Una terminal mostrando el paso de declaración para un arreglo.

  1. Población tu nuevo arreglo usando el operador de asignación incorporado de Bash. Por ejemplo, la siguiente línea de código crea un arreglo con cinco elementos dentro:
myarray=([0]=hello [1]=maketecheasier [2]=its [3]=an [4]=array)

Una terminal mostrando un arreglo básico con 5 elementos.

  1. Prueba si tu nuevo arreglo funciona usando el comando echo para extraer datos de él:
echo${myarray[1]}

Una terminal mostrando el script de arreglo extrayendo un solo elemento del arreglo.

También puedes transmitir el contenido de un arreglo usando el operador “*”:

echo${myarray[*]}

Una terminal mostrando el script de arreglo transmitiendo todo el arreglo.

Ejecutando variables de subshell

Una de las características más grandes de Bash es su capacidad para crear subshells, donde los programas pueden ejecutarse como si fueran funciones básicas. Por ejemplo, escribir ls -a en un script de shell y ejecutarlo seguirá imprimiendo el contenido del directorio de trabajo actual.

Una terminal mostrando un subshell de comando simple.

Aunque esto puede parecer limitante, Bash extiende esto permitiéndote almacenar la salida de estos programas dentro de variables. Esto te permite usarlas como entrada para otros programas dentro de tu script.

  1. Para usar variables de subshell, primero crea un script de shell vacío:
nano subshell.sh
  1. Escribe el siguiente código base dentro de tu nuevo script de shell:
#!/bin/bash  

mysubshell=$(x)  
echo"La salida de la variable es $mysubshell"
  1. Reemplaza la “x” con el comando que deseas ejecutar y almacenar la salida. Por ejemplo, lo siguiente obtendrá el contenido del archivo world.txt y reemplazará la palabra “world” con “maketecheasier.”
mysubshell=$(sed s/world/maketecheasier/g world.txt)

Una terminal mostrando una ejecución simple de subshell.

  1. Prueba tu nueva variable de subshell ejecutando tu nuevo script:
chmod u+x ./subshell.sh  
bash ./subshell.sh

Una terminal mostrando la salida del script de subshell.

FYI: además de las variables, estos son los caracteres especiales que deberías conocer en Bash.

Manipulación de subcadenas

Aparte de almacenar y recuperar datos, también puedes modificar el contenido de las variables. Bash tiene un conjunto de operadores que puedes adjuntar al final de cada variable, lo que te permitirá afinar tus scripts sin llamar a ningún programa adicional.

  1. Crea un script de shell vacío:
nano substring.sh
  1. Escribe el siguiente código base dentro de tu script vacío:
#!/bin/bash  

mysubstring=hello.txt.old  
echo"Mi nombre de archivo es: ${mysubstring}"
  1. La manipulación básica de subcadenas viene en tres formas. Primero, el carácter “#” acepta un patrón regex que el shell eliminará al principio de la variable:
#!/bin/bash  

mysubstring=hello.txt.old  
echo"Mi nombre de archivo es: ${mysubstring#*.}"

Una terminal mostrando la manipulación básica de prefijo de subcadena.

  1. Segundo, el carácter “%” también acepta un patrón regex que el shell eliminará al final de la variable:
#!/bin/bash  

mysubstring=hello.txt.old  
echo"Mi nombre de archivo es: ${mysubstring%.*}"

Una terminal mostrando la manipulación básica de sufijo de subcadena.

  • Bash también proporciona una forma de modificar selectivamente el contenido de una variable. Similar al programa sed, puedes usar el carácter “/” para encontrar y reemplazar cualquier cadena dentro de una variable:
#!/bin/bash  

mysubstring=hello.txt  
echo"Mi nombre de archivo es: ${mysubstring/hello/maketecheasier}"

Una terminal mostrando una función básica de edición de flujo de subcadena.

Bueno saber: las expresiones regulares son una herramienta importante en el kit de herramientas de cada usuario de Linux. Aprende a usarlas de manera efectiva a través de nuestra hoja de trucos fácil de aprender.

Preguntas frecuentes

¿Es posible ejecutar un script de shell dentro de una variable?

Sí, escribiendo la ruta completa del script que deseas ejecutar. Por ejemplo, ejecutar $(/home/ramces/.scripts/sample.sh) creará un subshell de Bash y ejecutará el script “sample.sh” desde mi directorio personal.

¿Puedes eliminar una variable mientras se está ejecutando un script?

Sí. Puedes eliminar una variable de un proceso de shell en ejecución insertando el subcomando unset seguido del nombre de la variable en tu script. Es importante tener en cuenta que ejecutar este comando no eliminará ninguna variable que se ejecute fuera del proceso de shell actual.

¿Puedes usar una variable permanente dentro de un script de shell externo?

Sí. Es posible referirse al valor de una variable que fue declarada fuera del proceso de shell actual. Sin embargo, también debes tener cuidado al usar variables externas, ya que es fácil sobrescribirlas temporalmente.

Crédito de la imagen: Unsplash. Todas las alteraciones y capturas de pantalla por Ramces Red.