Hablando como un novato bash, he estado actualizando mi .bashrc a través de copiar / pegar + github y me he encontrado con el :
comando que nos afecta tanto a mí como a Google. por ej : ${USER_BASH_COMPLETION_DIR:=~/.bash_completion.d}
.
Sin esta declaración originalmente en mi .bashrc, y escribiendo estas cosas en mi terminal ( -> indica salida relevante):
: ${USER_BASH_COMPLETION_DIR=~/.bash_completion.d}
echo $USER_BASH_COMPLETION_DIR
-> /Users/sh/.bash_completion.d
Y:
: ${USER_BASH_COMPLETION_DIR=~/.bash_completion.d}
export USER_BASH_COMPLETION_DIR=asdf
echo $USER_BASH_COMPLETION_DIR
-> asdf
Pero:
: ${USER_BASH_COMPLETION_DIR=~/.bash_completion.d}
export USER_BASH_COMPLETION_DIR=asdf
: ${USER_BASH_COMPLETION_DIR=~/.bash_completion.d}
echo $USER_BASH_COMPLETION_DIR
-> asdf
No lo entiendo!
1) ¿Cómo establece el comando de dos puntos una variable pero no puede sobrescribir un conjunto export
?
2) ¿Cuál es la lógica detrás de usar :
en algunos .bashrc?
Usando Mac 10.6.8
(fuera de contexto incluir la palabra clave dos puntos solo para ayudar a otros como yo que intentaron buscar ese término)
Respuestas:
:
es un shell integrado que es básicamente equivalente altrue
comando. A menudo se usa como no operativo, por ejemplo, después de unaif
declaración. Puede leer más al respecto en esta pregunta desde el desbordamiento de la pila .Los
${varname=value}
básicamente significa establecer el valor de$varname
avalue
, si$varname
no está ya establecido y, a continuación, devuelven el valor de $ nombre_var. Sin embargo, si intenta ejecutar eso en la línea de comando, intentará ejecutar el valor devuelto. Poner el:
frente como no operativo evita que bash intente ejecutar el valor.Tenga en cuenta que hay dos formas ligeramente diferentes:
establece varname en valor si varname no está establecido o es nulo.
solo establece el valor de varname si varname no está configurado actualmente (es decir, no cambiará varname de "" a value)
(Gracias a chepner por aclarar eso en un comentario).
Alguien más hace referencia a este método.
fuente