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 altruecomando. A menudo se usa como no operativo, por ejemplo, después de unaifdeclaració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$varnameavalue, si$varnameno 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