Probablemente esté al tanto de las variables en las secuencias de comandos de shell Bash.
Al igual que otros lenguajes de programación y secuencias de comandos, utiliza variables para almacenar los datos y luego hacer referencia a ellos más adelante en comandos futuros.
name="Linux Handbook"
echo "Hello $name!"
E imprimirá "Hello Linux Handbook!".
Fuera del ejemplo anterior, también hay una cantidad sorprendentemente grande de cosas que puede hacer con las variables, como completar un valor predeterminado cuando la variable no está configurada y asignar múltiples valores a una sola variable.
Permítanme mostrarles estos usos inusuales y avanzados de variables en bash scripting.
Usando matrices
Excluyendo el ejemplo anterior, el tipo de variable más común que encontrará en Bash son las matrices:
name=("Linux Handbook" "It's FOSS")
El ejemplo anterior asigna tanto Linux Handbook
y It's FOSS
como los valores para el name
variables.
Sin embargo, ¿cómo haces para acceder a cada valor?
Si ejecuta echo $name
, verá que imprime el primer valor, Linux Handbook
. Para acceder a los otros valores, deberá usar una sintaxis diferente para las variables.
Para comenzar a extraer los otros valores, comencemos familiarizándonos con lo siguiente:
echo "Hello ${name}!"
Esta es la base de lo que le permitirá obtener todos los valores de la variable y también lo que le permitirá realizar el resto de los métodos para interactuar con las variables a lo largo del resto de este artículo.
Volviendo al ejemplo anterior, puedes usar el ${variable[number]}
sintaxis para extraer un determinado elemento de una variable:
echo "Hello ${name[1]}!"
Este imprimirá "¡Hola, es FOSS!"
Si aún no pudo ver en el ejemplo anterior, el primer elemento de la matriz en realidad comienza en 0 en lugar de 1.
Así que para sacar el Linux Handbook
valor, sacaría el elemento en la posición 0:
echo "Hello ${name[0]}!"
Del mismo modo, simplemente omitiendo el [number]
part simplemente lo hace predeterminado al primer elemento de la matriz (que está en el índice 0).
Y esos conforman todos los tipos de variables que encontrarás dentro de Bash.
Ahora veamos cómo puede trabajar y modificar la salida de esas variables cuando las llamamos.
Establecer el valor cuando una variable no está configurada
Puede hacer que una variable vuelva por defecto a una determinada cadena cuando una variable no está configurada de esta manera:
${variable:-string}
Toma este ejemplo:
echo "Hello ${name:-nobody}!"
Dado que la variable name
no está configurado, se establecerá de forma predeterminada en nobody
y el comando anterior imprimirá "¡Hola nadie!".
Si la variable se establece de antemano, se utilizará su valor:
name="Linux Handbook"
echo "Hello ${name:-nobody}!"
El comando anterior imprime "Hello Linux Handbook!"
Establecer el valor cuando una variable es ya configurado
También puede configurar una variable para que devuelva un determinado valor cuando la variable es colocar. Esto haría que la variable imprima una determinada cadena cada vez que esté configurada y no imprima nada cuando no lo esté.
La sintaxis de este método es similar a la anterior, pero usa el +
firmar en lugar de -
.
${variable:+string}
Tome este ejemplo donde el nombre de la variable no está establecido. Por lo tanto, no imprimirá nada para esa parte variable y el resultado del comando será "¡Hola!"
echo "Hello ${name:+person}!"
Modifique el ejemplo anterior y configure la variable name
. Con este método especial, no utilizará el valor ya establecido y utilizará el que proporcionó.
name="Linux Handbook"
echo "Hello ${name:+person}!"
El comando anterior imprimirá "¡Hola persona!".
Probablemente encontrará más casos de uso con ${variable:-string}
sintaxis, como algunos de los beneficios de ${variable:+string}
ya se puede lograr con otras herramientas como las pruebas ([]
) operador:
Referencias indirectas a variables
El siguiente ejemplo utilizará la siguiente sintaxis:
${!variable}
Este es un poco más complejo en su funcionamiento, pero tiene sentido después de ver cómo funciona:
name="Linux Handbook"
variable="name"
echo "Hello ${!variable}!"
Imprimirá "Hello Linux Handbook".
Ese !
carácter antes del nombre de la variable hace que se sustituya el nombre de la variable normal, pero luego usa el nombre de eso trate de encontrar la variable relevante.
Asimismo:
variable
se sustituye por la cadenaname
, seguido de:name
siendo sustituido por su valor deLinux Handbook
.
Encontrar la longitud de una variable
Usemos el método anterior, pero intercambiemos el !
carácter para #
:
${#variable}
El uso de este método imprimirá la longitud de la variable, pero actuará ligeramente diferente dependiendo de si la variable es una cadena o una matriz.
Usar esa sintaxis en una cadena hará que la variable sea sustituida por la cantidad de caracteres en la cadena.
variable="name"
echo "Length is ${#variable}."
Imprimirá 4. Pero, por otro lado, usarlo en una matriz imprimirá la cantidad de elementos dentro de la matriz, es decir, el tamaño de la matriz, que aquí es 2.
variable=("name" "word")
echo "Length is ${#variable}."
Cadenas en minúsculas y mayúsculas
Por último, puede escribir en mayúsculas y minúsculas una cadena usando el ^
y ,
operadores respectivamente.
Los proporciona al final del nombre de la variable de esta manera:
# Capitalizes
${variable^}
${variable^^}
# Lowercases
${variable,}
${variable,,}
¿Cuál es la diferencia entre proporcionar uno y dos de los personajes?
Proporcionar solo uno (es decir, ${variable^}
) hará que solo se modifique la primera letra, mientras proporciona dos (${variable^^}
) hará que se modifique toda la cadena.
El siguiente ejemplo imprime Name
en lugar de name
:
variable="name"
echo "${variable^}"
Pero este imprime NAME
:
variable="name"
echo "${variable^^}"
Del mismo modo, también puede imprimir variables en minúsculas.
El siguiente ejemplo imprimirá wIDEname
:
variable="WIDEname"
echo "${variable,}"
Y este imprimirá widename
:
variable="WIDEname"
echo "${variable,,}"
Resumiendo
Estas son solo algunas de las formas en que puede usar variables dentro de Bash. Puede encontrar varias formas más de interactuar con las variables dentro de la documentación de Bash sobre la expansión de variables.
¿Tiene alguna pregunta sobre cómo funcionaron los ejemplos anteriores, o algo simplemente no funciona bien? Siéntete libre de dejar algo de eso en la sección de comentarios a continuación.