GNU/Linux >> Tutoriales Linux >  >> Linux

¿Qué hace aquí el '-' (guión) después de los nombres de las variables?

En circunstancias normales, ${FOO-} se comporta exactamente igual que ${FOO} .

Sin embargo, con set -u , la expansión de las variables no establecidas se convierte en un error por defecto.

Entonces ${FOO} podría ser un error, pero ${FOO-} nunca lo será.


Variables dentro de un ${...} se denominan «Expansión de parámetros».
Busque ese término en el manual en línea o en el manual real (línea 792).
El ${var-} form es similar en forma a ${var:-} . La diferencia se explica solo una línea antes del :- expansión (línea 810):

... bash prueba un parámetro que no está establecido o es nulo. Omitir los dos puntos da como resultado una prueba solo para un parámetro que no está configurado.

Por lo tanto, este formulario está probando solo cuando una variable no está configurada (y no nulo), y reemplaza toda la expansión ${...} para el valor después del - , que en este caso es null .

Por lo tanto, el ${var-} se convierte en:

  1. El valor de var cuando var tiene un valor (y no nulo).
  2. También el valor de var (¡faltan los dos puntos!) cuando var es nulo:'' , por lo tanto:también nulo.
  3. El valor después de - (en este caso, nulo '' ) si var no está configurado.

Todo eso es realmente:

  1. Expandir a '' cuando var no está configurado o es nulo.
  2. Expandir al valor de var (cuando var tiene un valor).

Por lo tanto, la expansión no cambia nada sobre el valor de var, ni su expansión, solo evita un posible error si el shell tiene la opción nounset establecer.

Este código se detendrá en ambos usos de $var :

#!/bin/bash
set -u

unset var

echo "variable $var"
[[ $var ]] && echo "var set"

Sin embargo, este código se ejecutará sin error:

#!/bin/bash
set -u

unset var
echo "variable ${var-}"
[[ ${var-} ]] && echo "var set"

Linux
  1. ¿Qué hace la llamada al sistema brk()?

  2. ¿Cuál es la magia de - (un guión) en los parámetros de la línea de comandos?

  3. ¿Qué hace el permiso de ejecución?

  4. ¿Qué significa el 'rc' en '.bashrc', etc.?

  5. ¿Qué hace la -e en un bash shebang?

Linux:¿qué significa un punto después de los bits de permiso del archivo?

No hay variable X11 DISPLAY - ¿qué significa?

¿Qué significa 999 aquí?

¿Qué significa la capacidad ep?

¿Qué es la variable de entorno XDG_VTNR?

¿Qué significa el sufijo .d en Linux?