: comando due punti per bash


28

Parlando come un principiante bash, ho aggiornato il mio .bashrc tramite copia / incolla + github e mi sono imbattuto nel :comando che sconcerta sia me che google. es : ${USER_BASH_COMPLETION_DIR:=~/.bash_completion.d}.

Senza questa affermazione originariamente nel mio .bashrc e digitando questa roba nel mio terminale ( -> indica l'output pertinente):

: ${USER_BASH_COMPLETION_DIR=~/.bash_completion.d}
echo $USER_BASH_COMPLETION_DIR
-> /Users/sh/.bash_completion.d

E:

: ${USER_BASH_COMPLETION_DIR=~/.bash_completion.d}
export USER_BASH_COMPLETION_DIR=asdf
echo $USER_BASH_COMPLETION_DIR
-> asdf

Ma:

: ${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

Non capisco!

1) In che modo il comando due punti imposta una variabile ma non può sovrascriverne una export?

2) Qual è la logica dietro l'utilizzo :in alcuni .bashrc?

Utilizzando Mac 10.6.8

(fuori dal contesto includere la parola chiave due punti solo per aiutare altri come me che hanno cercato di cercare quel termine)


Vedi la risposta eccellente lì stackoverflow.com/questions/10390406/…
Cedric

Risposte:


45

:è una shell incorporata che è sostanzialmente equivalente al truecomando. Viene spesso utilizzato come no-op, ad esempio dopo ifun'istruzione. Puoi leggere di più al riguardo in questa domanda dallo stack overflow .

I ${varname=value}fondamentalmente significa impostare il valore di $varnameper valuese $varnamenon è già impostato, e quindi restituire il valore di $ varname. Tuttavia, se si tenta di eseguirlo dalla riga di comando, tenterà di eseguire il valore restituito. Mettere :in primo piano come no-op impedisce a bash di provare a eseguire il valore.

Nota che ci sono due forme leggermente diverse:

${varname:=value}

imposta varname su value se varname è oset o null.

${varname=value}

imposta il valore di varname solo se varname è attualmente non impostato (ovvero, non cambierà varname da "" a valore)

(Grazie a chepner per averlo chiarito in un commento).

Qualcun altro che fa riferimento a questo metodo

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.