Substitution de variable Bash de variable suivie d'un trait de soulignement

12

La variable BUILDNUMBERest définie sur la valeur 230. Je m'attends 230_à être imprimé pour la commande echo $BUILDNUMBER_mais la sortie est vide comme indiqué ci-dessous.

# echo $BUILDNUMBER_

# echo $BUILDNUMBER
230
Talespin_Kit
la source

Réponses:

27

La commande echo $BUILDNUMBER_va imprimer la valeur de la variable $BUILDNUMBER_qui n'est pas définie (le soulignement est un caractère valide pour un nom de variable comme indiqué explicitement par Jeff Schaller)

Il vous suffit d'appliquer des accolades (accolades) autour du nom de la variable ou d'utiliser l' printfoutil le plus rigide :

echo "${BUILDNUMBER}_"
printf '%s_\n' "$BUILDNUMBER"

PS: citez toujours vos variables.

George Vasiliou
la source
1
La documentation et la norme utilisent le terme "null" pour une variable définie sur une chaîne vide (par opposition à une variable non définie). J'ai pris la liberté d'éditer.
ilkkachu
8

Comme George Vassiliou l'a déjà expliqué , c'est parce que vous imprimez la variable $BUILDNUMBER_au lieu de $BUILDNUMBER. La meilleure façon d'obtenir ce que vous voulez est d'utiliser ${BUILDNUMBER}_comme George l'a expliqué. Voici quelques options supplémentaires:

$ echo "$BUILDNUMBER"_
230_
$ echo $BUILDNUMBER"_"
230_
$ printf '%s_\n' "$BUILDNUMBER"
230_
terdon
la source
Nous savons ce que contient la variable, mais nous ne savons pas ce qui $IFSest vrai, donc echo $BUILDNUMBER"_"c'est toujours faux. Des trois, seulement printf '%s_\n' "$BUILDNUMBER"est correct si nous ne savons pas quoi $BUILDNUMBERou $IFStenir.
Stéphane Chazelas