Cómo gestionar la expansión de variables bash vacías o no
- 4834
- 1215
- Claudia Baca
Objetivo
El objetivo de este tutorial es aprender a modificar el comportamiento de Bash al expandir variables no establecidas o vacías usando sintaxis dedicada.
Requisitos
- No se requieren privilegios de sistema especiales para seguir este tutorial
Introducción
La expansión de las variables es una de las características más comunes utilizadas en el shell: cuando existe una variable y es parte de un comando, se "expande", por lo que se sustituye por su valor. La expansión de las variables vacías es una de esas cosas, que si no está bien manejada, podría causar daños graves a un sistema: imagine un comando como este:
$ sudo rm -rf "/$ dir"
En un caso como este, si el $ dir
La variable está vacía o no establecida, su expansión no produciría ningún valor, por lo tanto, el comando ejecutado real sería:
$ sudo rm -rf /
Nuestro sistema estaría condenado. Tratar, o prevenir mejor una situación como esa es de vital importancia. En este tutorial veremos cómo administrar la expansión de las variables vacías utilizando alguna sintaxis específica de Bash.
Use un valor predeterminado si una variable está vacía o no establecida
El primer caso que tenemos en cuenta es cuando se hace referencia a una variable unset o vacía en una expansión y queremos usar un valor de respuesta/predeterminado en su lugar. Supongamos que estamos haciendo referencia a los inexistentes $ Color
variable como parte del siguiente comando:
$ Echo "El cielo es $ color"
El resultado de este comando sería:
el cielo es
Como se esperaba, dado que la variable no está establecida, nada resulta de su expansión, dejándonos con una oración inacabada (y un cielo sin color). No hay daño real en este caso, por supuesto, pero ¿cómo podríamos instruir al shell que use un valor predeterminado en un caso como este??
Hay una sintaxis diseñada específicamente para obtener este comportamiento, y es muy simple:
$ parámetro: -word
Así es como funciona:
$ echo "El cielo es $ color:-" azul "" El cielo es azul
Cuando se usa esta sintaxis, si parámetro
no existe o está vacío, la expansión dará como resultado el valor de palabra
. En este caso, la variable $ Color
no se estableció, por lo tanto, la carcasa usó "azul" como resultado de la expansión.
Vale la pena notar que incluso si la expansión dio como resultado el valor especificado como un "predeterminado", con esta sintaxis, después de que se realiza la expansión, el $ Color
La variable seguirá sin ser:
$ echo "$ color"
Use y también asigne un nuevo valor si una variable está vacía o no establecida
El comando anterior no devolvió la salida, ya que la variable, en ese punto, todavía no estaba configurada. ¿Qué pasa si queremos usar un valor especificado al expandir una variable no set o vacía, pero también asignar ese valor a la variable después de que se realiza la expansión?? Una sintaxis ligeramente diferente de lo que queremos:
$ parámetro: = word
Veamos un ejemplo en el que se usa esta sintaxis:
$ echo "El cielo es $ color: =" azul "" El cielo es azul
Tal como pasó antes, palabra
se ha utilizado en la expansión, desde parámetro
(el $ Color
variable) no se estableció. Además, palabra
, ("Azul" en este caso), también se ha asignado como el valor para la variable previamente no establecida. Verificar que es muy fácil:
$ "El cielo es $ color" El cielo es azul
Ver? La expansión del $ Color
La variable ahora da como resultado "azul".
Use un valor alternativo si se establece una variable
Una sintaxis ligeramente diferente obtengamos un resultado incluso diferente, aquí está:
Parámetro:+Word
¿Cómo modifica el comportamiento del caparazón?? Cuando esta sintaxis se usa, si parámetro
está vacío o no establecido, palabra
voluntad no ser utilizado, por lo tanto, la expansión estará vacía. Si, en cambio, la variable tiene un valor, el resultado de la expansión será palabra
, y el valor de parámetro
no se cambiará. Aclaremos esto con algunos ejemplos:
Primer caso. La variable $ Color
no está establecido, por lo tanto, el resultado de la expansión no será nada:
$ echo "El cielo es $ color:+" azul "" El cielo es
Segundo caso. La variable $ Color
tiene un valor: la expansión dará como resultado el valor especificado a la derecha de :+
, Pero el valor del $ Color
La variable no se cambiará:
# Asignar un valor a la variable "color" $ color = "rojo" # Dado que la variable está establecida, el resultado de la expansión será "azul" $ echo "El cielo es $ color:+" azul "" el Sky es azul # El valor de la variable "color" no se ha cambiado $ echo "$ color" rojo
Copiar Muestra un mensaje de error si una variable está vacía o no establecida
El último tipo de sintaxis que examinaremos aquí es:
$ parámetro:?palabra
Cuando se usa esta sintaxis, si parámetro
no está configurado o vacío, el script saldrá con error. Además, palabra
será enviado a stderr
(Error estándar). En aras de este ejemplo, considere que la variable de "color" no es establecida como antes:
# El mensaje que especificamos se muestra al error estándar $ ECHO "El cielo es $ color:?"Color no establecido" "Bash: color: color no establecido
Copiar El comando salió con error y el color no establecido
Se mostró el mensaje. En caso de que se establezca la variable, el resultado de la expansión sería su propio valor:
$ color = "azul" $ echo "El cielo es $ color:?"Color no establecido" "El cielo es azul
Copiar Tutoriales de Linux relacionados:
- Sistema colgado de Linux? Cómo escapar a la línea de comando y ..
- Variables de Bash especiales con ejemplos
- Mint 20: Mejor que Ubuntu y Microsoft Windows?
- Archivos de configuración de Linux: los 30 principales más importantes
- Scripting bash: verifique si existe el directorio
- Cosas que hacer después de instalar Ubuntu 22.04 Jellyfish de Jammy ..
- Cosas que hacer después de instalar Ubuntu 20.04 fossa focal Linux
- Comandos de Linux: los 20 comandos más importantes que necesitas ..
- Cómo gestionar la historia de Bash
- Ubuntu 20.04 Guía