GNU/Linux >> Tutoriels Linux >  >> Linux

Utiliser "${a:-b}" pour l'affectation de variables dans les scripts ?

J'ai regardé quelques scripts que d'autres personnes ont écrits (en particulier Red Hat), et beaucoup de leurs variables sont assignées en utilisant la notation suivante
VARIABLE1="${VARIABLE1:-some_val}"
ou certains développent d'autres variables
VARIABLE2="${VARIABLE2:-`echo $VARIABLE1`}"

Quel est l'intérêt d'utiliser cette notation au lieu de simplement déclarer les valeurs directement (par exemple, VARIABLE1=some_val ) ?

Y a-t-il des avantages à cette notation ou d'éventuelles erreurs qui seraient évitées ?

Est-ce que le :- ont une signification particulière dans ce contexte ?

Réponse acceptée :

Cette technique permet d'attribuer une valeur à une variable si une autre variable est vide ou indéfinie. REMARQUE : Cette "autre variable" peut être la même ou une autre variable.

extrait

${parameter:-word}
    If parameter is unset or null, the expansion of word is substituted. 
    Otherwise, the value of parameter is substituted.

REMARQUE : Ce formulaire fonctionne également, ${parameter-word} . Si vous souhaitez voir une liste complète de toutes les formes d'extension de paramètres disponibles dans Bash, je vous suggère fortement de jeter un œil à ce sujet dans le wiki de Bash Hacker intitulé :"Parameter expansion".

Exemples

la variable n'existe pas

$ echo "$VAR1"

$ VAR1="${VAR1:-default value}"
$ echo "$VAR1"
default value

la variable existe

$ VAR1="has value"
$ echo "$VAR1"
has value

$ VAR1="${VAR1:-default value}"
$ echo "$VAR1"
has value

La même chose peut être faite en évaluant d'autres variables ou en exécutant des commandes dans la partie valeur par défaut de la notation.

$ VAR2="has another value"
$ echo "$VAR2"
has another value
$ echo "$VAR1"

$

$ VAR1="${VAR1:-$VAR2}"
$ echo "$VAR1"
has another value

Plus d'exemples

Vous pouvez également utiliser une notation légèrement différente où il s'agit simplement de VARX=${VARX-<def. value>} .

$ echo "${VAR1-0}"
has another value
$ echo "${VAR2-0}"
has another value
$ echo "${VAR3-0}"
0

Dans le $VAR1 ci-dessus &$VAR2 étaient déjà définis avec la chaîne "a une autre valeur" mais $VAR3 était indéfini, donc la valeur par défaut a été utilisée à la place, .

Un autre exemple

$ VARX="${VAR3-0}"
$ echo "$VARX"
0

Vérification et attribution à l'aide de := note

Enfin, je mentionnerai l'opérateur pratique, := . Cela effectuera une vérification et attribuera une valeur si la variable testée est vide ou indéfinie.

Exemple

Notez que $VAR1 est maintenant défini. L'opérateur := fait le test et le devoir en une seule opération.

$ unset VAR1
$ echo "$VAR1"

$ echo "${VAR1:=default}"
default
$ echo "$VAR1"
default

Cependant, si la valeur est définie avant, elle est laissée telle quelle.

$ VAR1="some value"
$ echo "${VAR1:=default}"
some value
$ echo "$VAR1"
some value

Tableau de référence pratique Dandy

En relation :Construire une commande en mettant une chaîne dans un tty ?

Références

  • Extensions de paramètres – Bash Hackers Wiki
  • 10.2. Substitution de paramètres
  • Extensions des paramètres bash

Linux
  1. Utilisation de l'outil SS pour le dépannage du réseau

  2. Utilisation de la commande Linux Sleep dans les scripts Bash

  3. Java Impossible de se connecter au serveur de fenêtres X11 en utilisant 'localhost:10.0' comme valeur de la variable DISPLAY

  4. Utilisation de variables dans SQLCMD pour Linux

  5. utiliser awk avec des conditions de valeur de colonne

Conseils pour utiliser la commande top sous Linux

Conseils d'utilisation de tmux

Conseils d'utilisation de l'écran

Comprendre la boucle for dans les scripts shell

Comment tracer des scripts Python à l'aide de trace.py

Portée variable pour les scripts shell bash et les fonctions dans le script