variable una sirve scripts script resultado que programas programacion pasar parametros para guardar entorno ejemplos cómo comando bash shell

una - Asignación de valores predeterminados a variables de shell con un solo comando en bash



scripts bash ejemplos (9)

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

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

Me parece 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 no funcionará ...)

¿Estoy loco o existe algo así?


Aquí hay un ejemplo

#!/bin/bash default=''default_value'' value=${1:-$default} echo "value: [$value]"

Guarda esto como script.sh y hazlo ejecutable. ejecutalo sin params

./script.sh > value: [default_value]

corre con param

./script.sh my_value > value: [my_value]


FWIW, puede proporcionar un mensaje de error así:

USERNAME=${1:?"Specify a username"}

Esto muestra un mensaje como este y sale con el código 1:

./myscript.sh ./myscript.sh: line 2: 1: Specify a username

Un ejemplo más completo de todo:

#!/bin/bash ACTION=${1:?"Specify ''action'' as argv[1]"} DIRNAME=${2:-$PWD} OUTPUT_DIR=${3:-${HOMEDIR:-"/tmp"}} echo "$ACTION" echo "$DIRNAME" echo "$OUTPUT_DIR"

Salida:

$ ./script.sh foo foo /path/to/pwd /tmp $ export HOMEDIR=/home/myuser $ ./script.sh foo foo /path/to/pwd /home/myuser

  • $ACTION toma el valor del primer argumento y sale si está vacío
  • $DIRNAME es el segundo argumento, y por defecto es el directorio actual
  • $OUTPUT_DIR es el tercer argumento, o $HOMEDIR (si está definido), else, /tmp . Esto funciona en OS X, pero no estoy seguro de que sea portátil.

Incluso puedes usar como valor predeterminado el valor de otra variable

tener un archivo defvalue.sh

#!/bin/bash variable1=$1 variable2=${2:-$variable1} echo $variable1 echo $variable2

ejecutar ./defvalue.sh first-value second-value salida de ./defvalue.sh first-value second-value

first-value second-value

y ejecute ./defvalue.sh first-value salida

first-value first-value


Luego está la forma de expresar tu construcción "si" de forma más concisa:

FOO=''default'' [ -n "${VARIABLE}" ] && FOO=${VARIABLE}


Muy cerca de lo que publicaste, en realidad:

FOO=${VARIABLE:-default} # If variable not set or null, use default.

O, que también asignará el default a VARIABLE :

FOO=${VARIABLE:=default} # If variable not set or null, set it to default.


Para argumentos de línea de comando:

VARIABLE=${1:-DEFAULTVALUE}

que asigna a VARIABLE el valor del primer argumento pasado al script o el valor de DEFAULTVALUE si no se pasa dicho argumento.


Para responder a tu pregunta y en todas las sustituciones de variables.

echo "$/{var}" echo "Substitute the value of var." echo "$/{var:-word}" echo "If var is null or unset, word is substituted for var. The value of var does not change." echo "2- $/{var:=word}" echo "If var is null or unset, var is set to the value of word." echo "$/{var:?message}" echo "If var is null or unset, message is printed to standard error. This checks that variables are set correctly." echo "$/{var:+word}" echo "If var is set, word is substituted for var. The value of var does not change."


Si la variable es igual, entonces

: "${VARIABLE:=DEFAULT_VALUE}"

asigna DEFAULT_VALUE a VARIABLE si no está definido. Las comillas dobles evitan el intercambio de palabras y la división de palabras.

También vea la Sección 3.5.3, Expansión de parámetros de Shell , en el manual de Bash.


ver aquí en 3.5.3 (expansión de parámetros de shell)

así que en tu caso

${VARIABLE:−default}