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

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.


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_

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.