2009-06-30 17 views
6

¿Alguien sabe lo que es: = para?Bash script ¿Qué es: = para?

Probé con Google pero parece que Google filtra todo el símbolo?

Sé que a continuación es algo así como comprobar si la variable HOME es un directorio y, a continuación, algo no es igual a la cadena vacía.

if [ "${HOME:=}" != "" ] && [ -d ${HOME} ] 

Respuesta

14

De Bash Reference Manual:

${parameter:=word}

Si el parámetro no está definido o nula, la expansión de palabra se asigna a parámetro. El valor del parámetro es luego sustituido. Los parámetros posicionales y los parámetros especiales pueden no asignarse de esta manera al .

Básicamente se le asignará el valor de word a parameter si y sólo si parameter es definido o está vacío.

+0

me golpearon en un segundo :) Y –

+0

mí por dos;) – bedwyr

+0

que he visto: = mucha lugares. Normalmente, leo que está "definido por". En C++, C#, Java (+ cien lugares más): = equals =. Y cuando esto es cierto, usualmente = es igual ==. Guau, ese fue un punto sutil para mí. Perdón por ser tan malo al explicarme a mí mismo :) – cwap

1

Desde la página del manual de Bash:

asignar valores por defecto. Si el parámetro está desactivado o es nulo, la expansión de la palabra se asigna al parámetro . El valor del parámetro se sustituye. Los parámetros posicionales y los parámetros especiales pueden no asignarse de esta manera al .

Las páginas de manual son una cosa maravillosa. man bash le dirá casi todo lo que quiere saber sobre Bash.

0

Aquí "${HOME:=}" es más o menos un no-op, ya que devuelve $ HOME si está configurado y nada si no lo está.

if [ "${HOME:=}" != "" ] && [ -d ${HOME} ] 

Esto podría funcionar de forma idéntica:

if [ "${HOME}" != "" ] && [ -d ${HOME} ] 

Si tuviera algo después del signo igual, la primera parte de la if siempre sería verdad.

if [ "${HOME:=here}" != "" ] && [ -d ${HOME} ] 

pase lo que pase, siempre obtendrías una cadena que no es igual a "".

Sin embargo, esto dependerá de si $ HOME y $ DEFAULT eran nulas:

if [ "${HOME:=$DEFAULT}" != "" ] && [ -d ${HOME} ] 
+0

No es absolutamente no-operativo, ya que si $ HOME no está definido, se establecerá en la cadena vacía. – camh

+0

@camh: en bash, prácticamente no hay diferencia entre una variable indefinida y una con un valor nulo. –