Estoy tratando de entender un script de Bash. Me encontré con esto:¿Cómo funciona la expansión del parámetro Bash?
DIR=${1:-"/tmp"}
¿Qué significa eso?
Estoy tratando de entender un script de Bash. Me encontré con esto:¿Cómo funciona la expansión del parámetro Bash?
DIR=${1:-"/tmp"}
¿Qué significa eso?
:-
es en realidad un operador que dice que si $1
(primer argumento de la secuencia de comandos) no está ajustado o es null
a continuación, utilizar /tmp
como el valor de $DIR
y si está configurado asignar su valor a $DIR
.
DIR=${1:-"/tmp"}
es la abreviatura de
if [ -z $1 ]; then
DIR='/tmp'
else
DIR="$1"
fi
Puede ser utilizado con cualquier variable de parámetros no sólo posicionales:
$ echo ${HOME:-/tmp} # since $HOME is set it will be displayed.
/home/codaddict
$ unset HOME # unset $HOME.
$ echo ${HOME:-/tmp} # since $HOME is not set, /tmp will be displayed.
/tmp
$
que la sintaxis es: parameter expansion
${parameter:-word}
Si
parameter
está desactivado o nulo, se sustituye la expansión deword
. De lo contrario, se sustituye el valor deparameter
.
Así que si $1
es definido o está vacío, se evalúa como "/tmp"
y al valor de $1
lo contrario.
Gracias por el útil enlace. – user469083
Gracias por aclararlo. El desbordamiento de la pila es demasiado rápido :) – user469083
Primero, como dijo Gumbo en su respuesta, las cuentas ': -' no solo se refieren a la variable unset, sino también a la variable que se expande a una cadena nula. Use '-' (sin dos puntos) para probar solo la variable set/unset. En segundo lugar, su código con DIR está mal porque no citó la variable '$ 1'. Como resultado, si se expande a múltiples campos, se producirá un error. –