En tant que débutant bash, j'ai mis à niveau mon .bashrc via copier / coller + github et je suis tombé sur la :
commande qui me bloque et google. par exemple : ${USER_BASH_COMPLETION_DIR:=~/.bash_completion.d}
.
Sans cette déclaration à l'origine dans mon .bashrc, et en tapant ce truc dans mon terminal ( -> indique la sortie pertinente):
: ${USER_BASH_COMPLETION_DIR=~/.bash_completion.d}
echo $USER_BASH_COMPLETION_DIR
-> /Users/sh/.bash_completion.d
Et:
: ${USER_BASH_COMPLETION_DIR=~/.bash_completion.d}
export USER_BASH_COMPLETION_DIR=asdf
echo $USER_BASH_COMPLETION_DIR
-> asdf
Mais:
: ${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
Je ne comprends pas!
1) Comment la commande deux-points définit-elle une variable mais ne peut pas en remplacer une par export
?
2) Quelle est la logique derrière l'utilisation :
de certains .bashrc?
Utilisation de Mac 10.6.8
(hors contexte, inclure le mot-clé deux-points juste pour aider d'autres personnes comme moi qui ont essayé de rechercher ce terme)
Réponses:
:
est un shell intégré qui est fondamentalement équivalent à latrue
commande. Il est souvent utilisé comme no-op, par exemple après uneif
déclaration. Vous pouvez en savoir plus à ce sujet dans cette question sur le débordement de pile .Les
${varname=value}
essentiellement des moyens mis à la valeur de$varname
lavalue
si$varname
ce n'est déjà, puis retourner la valeur de $ varname. Bien que si vous essayez de l'exécuter sur la ligne de commande, il essaiera d'exécuter la valeur renvoyée. Mettre l':
avant en tant que no-op empêche bash d'essayer d'exécuter la valeur.Notez qu'il existe deux formes légèrement différentes:
définit varname sur une valeur si varname est non défini ou nul.
ne définit la valeur de varname que si varname est actuellement non défini (c'est-à-dire qu'il ne changera pas varname de "" en valeur)
(Merci à chepner d'avoir clarifié cela dans un commentaire).
Quelqu'un d'autre référençant cette méthode
la source