Tracks
/
Bash
Bash
/
Temario
/
Variables
Va

Variables en Bash

{one: "1 ejercicio", many: "%{count} ejercicios", other: "%{count} ejercicios"}

Acerca de Variables

Variables

Las variables son un lugar donde guardar datos. Bash tiene dos tipos de datos: strings y arrays. Hablaremos de los arrays más adelante.

Asignas una variable así:

name="value"
Note

Importante: ¡no debe haber ningún espacio alrededor del signo igual!

Cuando hay espacios, como en este ejemplo,

x = 10

¡bash va a llamar al comando x con los dos argumentos = y 10!

A las variables también se las puede llamar parámetros. Ambos términos se usarán indistintamente en este documento.

Algunos parámetros importantes que usa o establece bash son:

  • PATH: una lista de directorios separados por dos puntos que se usa para localizar comandos externos.
  • IFS: el «separador de campos interno». Veremos cómo se usa más abajo.
  • PWD: tu directorio de trabajo actual. Tendrá el mismo valor que la salida del comando pwd.
  • RANDOM: un número entero pseudoaleatorio entre 0 y 32767.
  • BASH_VERSION: el string con la versión de la instancia de bash en ejecución.

Nombres de variables

El nombre de una variable se compone de letras mayúsculas, letras minúsculas, números y guion bajo. No puede empezar por un número.

Caution

Es una buena práctica evitar usar nombres de variables en MAYÚSCULAS. El shell usa esta convención para sus parámetros, y no quieres sobrescribir sin querer parámetros del shell que tienen un significado especial. Por ejemplo: 1, 2, 3

Expansión de parámetros

Obtienes el valor de un parámetro con la sintaxis $varname.

x=10
echo "The value of x is $x"

Para evitar que el nombre de la variable se confunda con el texto que lo rodea, puedes encerrar el nombre de la variable entre llaves. Por ejemplo, para imprimir el string 10x10:

echo "${x}x$x"
# or
echo "${x}x${x}"

Algunas guías de estilo recomiendan usar llaves en la mayoría de los casos por legibilidad o consistencia.

Parámetros posicionales

Como comentamos en la lección Comandos y argumentos, los comandos pueden recibir argumentos. Los scripts de bash no son una excepción. Los argumentos de la instancia actual de bash se llaman parámetros posicionales. Se pueden obtener con estos parámetros especiales:

  • $1: el primer parámetro posicional
  • $2 ... $9: los parámetros siguientes
  • ${10} ...: los números de dos cifras requieren llaves.
  • $0: el nombre del script actual.

Los argumentos de una función del shell también son parámetros posicionales, y se manejan igual que estos. Veremos más sobre las funciones en una lección posterior.

Parámetros posicionales especiales

Hay algunos parámetros especiales que te ayudan a trabajar con los parámetros posicionales.

  • $# se expande al número de parámetros posicionales.
  • "$@" se expande a la lista de todos los parámetros posicionales, cada uno como una palabra separada.
  • "$*" se expande a un único string con todos los parámetros posicionales unidos por un carácter.
    • El carácter de unión es el primer carácter de la variable $IFS, que por defecto es un espacio.

"$@" es la forma más segura de pasar parámetros posicionales a otro comando manteniéndolos entrecomillados de forma segura. También es lo que usarás para recorrer con un bucle los parámetros posicionales:

for arg in "$@"; do
    do_something_with "$arg"
done

En la práctica, "$@" se usa más a menudo que "$*".

Sustitución de comandos

Una operación muy frecuente que harás en los scripts de bash es capturar la salida de un comando y guardarla en una variable. Para ello, usarás la sustitución de comandos.

var=$(command)

Por ejemplo, para convertir un string a mayúsculas, puedes hacer esto:

text="Hello world!"
uppercase=$(echo "$text" | tr '[:lower:]' '[:upper:]')
echo "$uppercase"
# => HELLO WORLD!

Más sobre la expansión de parámetros

Bash tiene muchas utilidades integradas para manipular variables y strings, de modo que no necesites llamar a comandos externos.

  • Convertir texto a mayúsculas. En la sección anterior mostré cómo usar tr para pasar texto a mayúsculas. Para hacerlo en bash:

    echo "${text^^}"
    

    De forma similar, ${text,,} convierte el valor a minúsculas.

  • Proporcionar un valor por defecto si la variable está vacía.

    default="nothing here"
    result=""
    echo "${result:-$default}"
    # => nothing here
    
  • Buscar y reemplazar.

    text="Hello world!"
    echo "${text//[aeiou]/X}"
    # => HXllX wXrld!"
    

Hay muchas otras expansiones de parámetros interesantes: extraer una subcadena, obtener la longitud del string, asignar un valor por defecto, eliminar texto del principio o el final del valor, y más. Puedes leer sobre ellas en el manual.

Editar en GitHub El enlace se abre en una nueva ventana o pestaña