GNU/Linux >> Tutoriels Linux >  >> Linux

Que fait le '-' (tiret) après les noms de variables ici ?

Dans des circonstances normales, ${FOO-} se comporte exactement comme ${FOO} .

Cependant, avec set -u , l'expansion des variables non définies devient une erreur par défaut.

Donc ${FOO} peut être une erreur, mais ${FOO-} ne le sera jamais.


Variables à l'intérieur d'un ${...} sont appelés « Expansion des paramètres ».
Recherchez ce terme dans le manuel en ligne ou dans le manuel réel (ligne 792).
Le ${var-} form est similaire dans sa forme à ${var:-} . La différence est expliquée juste une ligne avant le :- extension (ligne 810):

... bash teste un paramètre non défini ou nul. L'omission des deux-points entraîne un test uniquement pour un paramètre non défini.

Ainsi, ce formulaire teste uniquement lorsqu'une variable n'est pas définie (et non nul), et remplace toute l'expansion ${...} pour la valeur après le - , qui dans ce cas est null .

Par conséquent, le ${var-} devient :

  1. La valeur de var lorsque var a une valeur (et non null).
  2. Aussi la valeur de var (les deux-points :sont manquants !) lorsque var est nul :'' , donc :également null.
  3. La valeur après le - (dans ce cas, null '' ) si var n'est pas défini.

Tout ça c'est vraiment :

  1. Développer jusqu'à '' lorsque var est non défini ou nul.
  2. Développez jusqu'à la valeur de var (lorsque var a une valeur).

Par conséquent, l'expansion ne change rien à la valeur de var, ni à son expansion, évite simplement une erreur possible si le shell a l'option nounset ensemble.

Ce code s'arrêtera sur les deux utilisations de $var :

#!/bin/bash
set -u

unset var

echo "variable $var"
[[ $var ]] && echo "var set"

Cependant ce code s'exécutera sans erreur :

#!/bin/bash
set -u

unset var
echo "variable ${var-}"
[[ ${var-} ]] && echo "var set"

Linux
  1. Que signifie la sortie de Ps ?

  2. Le point d'Uniq -u et à quoi ça sert ??

  3. Définir +a n'annule pas l'indicateur -a ?

  4. Que signifie le nombre entre parenthèses affiché après les noms de commandes Unix dans les pages de manuel ?

  5. Que signifie un point avant le nom de la variable dans struct ?

Pas de variable DISPLAY X11 - qu'est-ce que cela signifie ?

Que signifie 999 ici ?

Que fait le -e dans un bash shebang ?

Que signifie un point après les bits d'autorisation de fichier ?

Quelle est la différence entre $(CC) et $CC ?

Que signifie le suffixe .d sous Linux ?