Tengo un montón de pruebas en variables en un script de shell bash (3.00) donde si la variable no está configurada, entonces asigna un valor predeterminado, por ejemplo:
if [ -z "${VARIABLE}" ]; then
FOO='default'
else
FOO=${VARIABLE}
fi
Creo recordar que hay una 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í?
Respuestas:
Muy cerca de lo que publicaste, en realidad:
O, lo que va a asignar
default
aVARIABLE
así:fuente
Para argumentos de línea de comando:
que se asigna al
VARIABLE
valor del primer argumento pasado al script o al valor deDEFAULTVALUE
si no se pasó dicho argumento.fuente
Si la variable es la misma, entonces
asigna DEFAULT_VALUE a VARIABLE si no está definido. Las comillas dobles evitan el engorde y la división de palabras.
Consulte también la Sección 3.5.3, Expansión del parámetro Shell , en el manual de Bash.
fuente
HISTTIMEFORMAT
: ${FOO:=DEFAULT1} ${BAR:=DEFAULT2}
Incluso puedes usar como valor predeterminado el valor de otra variable
tener un archivo
defvalue.sh
ejecutar
./defvalue.sh first-value second-value
saliday ejecutar
./defvalue.sh first-value
salidafuente
ver aquí en 3.5.3 (expansión de parámetros de shell)
entonces en tu caso
fuente
Para responder a su pregunta y en todas las sustituciones variables
fuente
FWIW, puede proporcionar un mensaje de error como este:
Esto muestra un mensaje como este y sale con el código 1:
Un ejemplo más completo de todo:
Salida:
$ACTION
toma el valor del primer argumento y sale si está vacío$DIRNAME
es el segundo argumento y su valor predeterminado es el directorio actual$OUTPUT_DIR
es la tercera discusión, o$HOMEDIR
(si está definida), de lo contrario,/tmp
. Esto funciona en OS X, pero no estoy seguro de que sea portátil.fuente
Luego está la forma de expresar su construcción 'if' de manera más escueta:
fuente
Aquí hay un ejemplo
guarde esto como script.sh y hágalo ejecutable. ejecutarlo sin params
ejecutarlo con param
fuente