2010-10-07 19 views

Respuesta

8

:- 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 
$ 
+0

Gracias por aclararlo. El desbordamiento de la pila es demasiado rápido :) – user469083

+1

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. –

8

que la sintaxis es: parameter expansion

${parameter:-word} 

Si parameter está desactivado o nulo, se sustituye la expansión de word. De lo contrario, se sustituye el valor de parameter.

Así que si $1 es definido o está vacío, se evalúa como "/tmp" y al valor de $1 lo contrario.

+1

Gracias por el útil enlace. – user469083

Cuestiones relacionadas