Podstawienie zmiennej Bash, po której następuje podkreślenie

12

Zmienna BUILDNUMBERjest ustawiona na wartość 230. Spodziewam 230_się, że zostanie wydrukowana dla polecenia, echo $BUILDNUMBER_ale wynik jest pusty, jak pokazano poniżej.

# echo $BUILDNUMBER_

# echo $BUILDNUMBER
230
Talespin_Kit
źródło

Odpowiedzi:

27

Polecenie echo $BUILDNUMBER_wypisze wartość zmiennej, $BUILDNUMBER_która nie jest ustawiona (podkreślenie jest poprawnym znakiem dla nazwy zmiennej, jak wyraźnie zauważył Jeff Schaller)

Wystarczy zastosować nawiasy klamrowe (nawiasy klamrowe) wokół nazwy zmiennej lub użyć najbardziej sztywnego printfnarzędzia:

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

PS: Zawsze podawaj swoje zmienne.

George Vasiliou
źródło
1
Dokumentacja i standard używają terminu „null” dla zmiennej ustawionej na pusty ciąg (w przeciwieństwie do zmiennej nieustawionej). Pozwoliłem sobie na edycję.
ilkkachu 11.04.17
8

Jak już wyjaśnił George Vassiliou , to dlatego, że wypisujesz zmienną $BUILDNUMBER_zamiast $BUILDNUMBER. Najlepszym sposobem na zdobycie tego, czego chcesz, jest skorzystanie z ${BUILDNUMBER}_wyjaśnień George'a. Oto kilka innych opcji:

$ echo "$BUILDNUMBER"_
230_
$ echo $BUILDNUMBER"_"
230_
$ printf '%s_\n' "$BUILDNUMBER"
230_
terdon
źródło
Wiemy, co zawiera zmienna, ale nie wiemy, co $IFSzawiera, więc echo $BUILDNUMBER"_"nadal jest źle. Z tych trzech printf '%s_\n' "$BUILDNUMBER"jest poprawne tylko wtedy, gdy nie wiemy co $BUILDNUMBERlub co $IFSutrzymujemy.
Stéphane Chazelas