$ {paramètre: = mot} Attribuer des valeurs par défaut. Si le paramètre est non défini ou nul, le développement du mot est affecté au paramètre. La valeur du paramètre est alors substituée. Les paramètres de position et les paramètres spéciaux ne peuvent pas être affectés de cette manière.
Je pensais que je pourrais utiliser cette fonctionnalité pour écrire ${LONG_VARIABLE_NAME:=hello}
au lieu de la plus longue LONG_VARIABLE_NAME=${LONG_VARIABLE_NAME:-hello}
, mais maintenant, bash essaie également d'exécuter «bonjour» et cela donne une commande introuvable. Un moyen d'éviter cela? Ou vais-je devoir m'en tenir à ce dernier? Quelqu'un peut-il donner un exemple où l'affectation par défaut est réellement utile?
Réponses:
Utilisez deux points:
Le signe deux-points est une commande nulle qui ne fait rien et ignore ses arguments. Il est intégré à bash afin qu'aucun nouveau processus ne soit créé.
la source
: ${A:=hello}
c'est exactement aussi long queA=${A:-hello}
. Il semble aussi que ce dernier soit un peu moins ésotérique et que son intention soit plus claire. L'utilisation:
, qui est essentiellement un no-op, semble dérisoire par rapport à la façon dont l'OP le faisait auparavant.:
approche serait préférable, à la fois pour la saisie et pour la lecture. Oui, cela semble être un domaine dans lequel Bash pourrait utiliser une petite amélioration.: ${VERY_LONG_VARIABLE_NAME:=hello}
vsVERY_LONG_VARIABLE_NAME=${VERY_LONG_VARIABLE_NAME:-hello}
. : . J'espère que vous utilisez des noms de variables descriptifs dans votre code :)VERY_LONG_VARIABLE_NAME=${VERY_LOGN_VARIABLE_NAME:-hello}
. Oups.A=$A:-hello
approche est qu'elle se documente automatiquement lorsqu'elle est exécutée avecset -x
. Autrement dit, l'affectation s'imprimera commeA=hello
alors que la commande null n'imprimerait que la valeur (hello
).Veuillez consulter http://www.tldp.org/LDP/abs/html/parameter-substitution.html pour des exemples
Si le paramètre n'est pas défini, utilisez la valeur par défaut. Après l'appel, le paramètre n'est toujours pas défini.
Les deux formes sont presque équivalentes. L'extra ne
:
fait une différence que lorsque le paramètre a été déclaré, mais est nul.Si le paramètre n'est pas défini, définissez la valeur du paramètre sur la valeur par défaut.
Les deux formes presque équivalentes. Le: fait une différence uniquement lorsque le paramètre a été déclaré et est nul
Si le paramètre est défini, utilisez alt_value, sinon utilisez une chaîne nulle. Après l'appel, la valeur du paramètre n'a pas été modifiée.
Les deux formes presque équivalentes. Le: fait une différence uniquement lorsque le paramètre a été déclaré et est nul
la source
L'expansion des paramètres de valeur par défaut est souvent utile dans les scripts de construction comme l'exemple ci-dessous. Si l'utilisateur appelle simplement le script tel quel, perl ne sera pas intégré. L'utilisateur doit définir explicitement
WITH_PERL
une valeur autre que "no" pour l'avoir intégré.Construire sans Perl
Construire avec Perl
la source