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

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.


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_

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.