Sostituzione variabile bash della variabile seguita da trattino basso


12

La variabile BUILDNUMBERè impostata sul valore 230. Mi aspetto 230_di essere stampata per il comando echo $BUILDNUMBER_ma l'output è vuoto come mostrato di seguito.

# echo $BUILDNUMBER_

# echo $BUILDNUMBER
230

Risposte:


27

Il comando echo $BUILDNUMBER_stampa il valore della variabile $BUILDNUMBER_che non è impostata (il carattere di sottolineatura è un carattere valido per un nome di variabile, come esplicitamente notato da Jeff Schaller)

Hai solo bisogno di applicare parentesi graffe (parentesi graffe) attorno al nome della variabile o utilizzare lo printfstrumento più rigido :

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

PS: cita sempre le tue variabili.


1
La documentazione e lo standard usano il termine "null" per una variabile impostata su una stringa vuota (al contrario di una variabile non impostata). Mi sono preso la libertà di modificare.
ilkkachu,

8

Come già spiegato da George Vassiliou , è perché stai stampando la variabile $BUILDNUMBER_anziché $BUILDNUMBER. Il modo migliore per ottenere quello che vuoi è usare ${BUILDNUMBER}_come ha spiegato George. Ecco alcune altre opzioni:

$ echo "$BUILDNUMBER"_
230_
$ echo $BUILDNUMBER"_"
230_
$ printf '%s_\n' "$BUILDNUMBER"
230_

Sappiamo cosa contiene la variabile, ma non sappiamo cosa $IFScontiene, quindi echo $BUILDNUMBER"_"è ancora sbagliato. Dei tre, printf '%s_\n' "$BUILDNUMBER"è corretto solo se non sappiamo cosa $BUILDNUMBERo $IFStenere.
Stéphane Chazelas,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.