Asignar valores predeterminados a variables de shell con un solo comando en bash

Resuelto Edward Q. Bridges asked hace 14 años • 12 respuestas

Tengo un montón de pruebas sobre variables en un script de shell bash (3.00) donde, si la variable no está configurada, asigna un valor predeterminado, por ejemplo:

if [ -z "${VARIABLE}" ]; then 
    FOO='default'
else 
    FOO=${VARIABLE}
fi

Creo recordar que hay cierta sintaxis para hacer esto en una línea, algo parecido a un operador ternario, por ejemplo:

FOO=${ ${VARIABLE} : 'default' }

(aunque sé que eso no funcionará...)

¿Estoy loco o existe algo así?

Edward Q. Bridges avatar Jan 06 '10 21:01 Edward Q. Bridges
Aceptado

Muy parecido a lo que publicaste, en realidad. Puedes usar algo llamado expansión de parámetros Bash para lograr esto.

Para obtener el valor asignado, o defaultsi falta:

FOO="${VARIABLE:-default}"  # FOO will be assigned 'default' value if VARIABLE not set or null.
# The value of VARIABLE remains untouched.

Para hacer lo mismo, además de asignar defaulta VARIABLE:

FOO="${VARIABLE:=default}"  # If VARIABLE not set or null, set it's value to 'default'. 
# Then that value will be assigned to FOO
Andrew McGregor avatar Jan 06 '2010 14:01 Andrew McGregor

Para argumentos de línea de comando:

VARIABLE="${1:-$DEFAULTVALUE}"

que asigna VARIABLEel valor del primer argumento pasado al script o el valor de DEFAULTVALUEsi no se pasó dicho argumento. Las citas evitan la fragmentación y la división de palabras.

miku avatar Jan 06 '2010 14:01 miku