GNU/Linux >> Tutoriales Linux >  >> Linux

¿Usa “${a:-b}” para la asignación de variables en scripts?

He estado mirando algunos scripts que escribieron otras personas (específicamente Red Hat), y muchas de sus variables se asignan usando la siguiente notación
VARIABLE1="${VARIABLE1:-some_val}"
o algunos expanden otras variables
VARIABLE2="${VARIABLE2:-`echo $VARIABLE1`}"

¿Cuál es el punto de usar esta notación en lugar de simplemente declarar los valores directamente (por ejemplo, VARIABLE1=some_val )?

¿Existen beneficios para esta notación o posibles errores que se evitarían?

¿El :- tienen un significado específico en este contexto?

Respuesta aceptada:

Esta técnica permite asignar un valor a una variable si otra variable está vacía o no está definida. NOTA: Esta “otra variable” puede ser la misma u otra variable.

extracto

${parameter:-word}
    If parameter is unset or null, the expansion of word is substituted. 
    Otherwise, the value of parameter is substituted.

NOTA: Este formulario también funciona, ${parameter-word} . Si desea ver una lista completa de todas las formas de expansión de parámetros disponibles en Bash, le sugiero que eche un vistazo a este tema en el wiki de Bash Hacker titulado:"Expansión de parámetros".

Ejemplos

la variable no existe

$ echo "$VAR1"

$ VAR1="${VAR1:-default value}"
$ echo "$VAR1"
default value

existe variable

$ VAR1="has value"
$ echo "$VAR1"
has value

$ VAR1="${VAR1:-default value}"
$ echo "$VAR1"
has value

Se puede hacer lo mismo evaluando otras variables o ejecutando comandos dentro de la parte del valor predeterminado de la notación.

$ VAR2="has another value"
$ echo "$VAR2"
has another value
$ echo "$VAR1"

$

$ VAR1="${VAR1:-$VAR2}"
$ echo "$VAR1"
has another value

Más ejemplos

También puede usar una notación ligeramente diferente donde es simplemente VARX=${VARX-<def. value>} .

$ echo "${VAR1-0}"
has another value
$ echo "${VAR2-0}"
has another value
$ echo "${VAR3-0}"
0

En el anterior $VAR1 &$VAR2 ya estaban definidos con la cadena "tiene otro valor" pero $VAR3 no estaba definido, por lo que se utilizó el valor predeterminado, .

Otro ejemplo

$ VARX="${VAR3-0}"
$ echo "$VARX"
0

Comprobación y asignación usando := notación

Por último mencionaré el práctico operador, := . Esto hará una verificación y asignará un valor si la variable bajo prueba está vacía o indefinida.

Ejemplo

Observe que $VAR1 ahora está configurado. El operador := hizo la prueba y la asignación en una sola operación.

$ unset VAR1
$ echo "$VAR1"

$ echo "${VAR1:=default}"
default
$ echo "$VAR1"
default

Sin embargo, si el valor se establece antes, se deja solo.

$ VAR1="some value"
$ echo "${VAR1:=default}"
some value
$ echo "$VAR1"
some value

Tabla de referencia Handy Dandy

Relacionado:¿Construir un comando poniendo una cadena en un tty?

Referencias

  • Expansiones de parámetros - Bash Hackers Wiki
  • 10.2. Sustitución de parámetros
  • Expansiones de parámetros de Bash

Linux
  1. Consejos de Linux para usar cron para programar tareas

  2. Usando Bash para la automatización

  3. Uso de la herramienta SS para la resolución de problemas de red

  4. ¿Crear variable usando valor de variable como parte del nuevo nombre de variable?

  5. ¿Reemplazar una línea con otro contenido usando Sed y paralelo para un archivo grande?

Consejos para usar el comando superior en Linux

Consejos para usar tmux

Consejos para usar la pantalla

Comprender el bucle for en los scripts de Shell

Alcance variable para scripts y funciones bash shell en el script

¿Estoy usando virtio para mi invitado KVM?