Ersetzen der Variablen durch Bash-Variablen, gefolgt von einem Unterstrich

11

Die Variable BUILDNUMBERwird auf den Wert 230 gesetzt. Ich erwarte 230_, dass sie für den Befehl gedruckt wird, echo $BUILDNUMBER_aber die Ausgabe ist leer, wie unten gezeigt.

# echo $BUILDNUMBER_

# echo $BUILDNUMBER
230
Talespin_Kit
quelle

Antworten:

25

Der Befehl echo $BUILDNUMBER_gibt den Wert der $BUILDNUMBER_nicht festgelegten Variablen aus (der Unterstrich ist ein gültiges Zeichen für einen Variablennamen, wie von Jeff Schaller explizit angegeben).

Sie müssen nur geschweifte Klammern (geschweifte Klammern) um den Variablennamen setzen oder das starrste printfWerkzeug verwenden:

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

PS: Zitieren Sie immer Ihre Variablen.

George Vasiliou
quelle
In der Dokumentation und im Standard wird der Begriff "null" für eine Variable verwendet, die auf eine leere Zeichenfolge festgelegt ist (im Gegensatz zu einer nicht festgelegten Variablen). Ich habe mir die Freiheit genommen, zu bearbeiten.
Ilkkachu
7

Wie George Vassiliou bereits erklärt hat, liegt dies daran, dass Sie $BUILDNUMBER_stattdessen die Variable drucken $BUILDNUMBER. Der beste Weg, um das zu bekommen, was Sie wollen, ist, ${BUILDNUMBER}_wie George erklärte. Hier sind einige weitere Optionen:

$ echo "$BUILDNUMBER"_
230_
$ echo $BUILDNUMBER"_"
230_
$ printf '%s_\n' "$BUILDNUMBER"
230_
terdon
quelle
Wir wissen, was die Variable enthält, aber wir wissen nicht, was $IFSgilt, also echo $BUILDNUMBER"_"ist es immer noch falsch. Von den dreien ist nur printf '%s_\n' "$BUILDNUMBER"dann richtig, wenn wir nicht wissen, was $BUILDNUMBERoder $IFShalten.
Stéphane Chazelas