Substitusi variabel bash dari variabel diikuti oleh garis bawah

12

Variabel BUILDNUMBERdiatur ke nilai 230. Saya berharap 230_akan dicetak untuk perintah echo $BUILDNUMBER_tetapi output kosong seperti yang ditunjukkan di bawah ini.

# echo $BUILDNUMBER_

# echo $BUILDNUMBER
230
Talespin_Kit
sumber

Jawaban:

27

Perintah echo $BUILDNUMBER_akan mencetak nilai variabel $BUILDNUMBER_yang tidak disetel (garis bawah adalah karakter yang valid untuk nama variabel seperti yang secara eksplisit dicatat oleh Jeff Schaller)

Anda hanya perlu menerapkan kawat gigi (kurung keriting) di sekitar nama variabel atau menggunakan alat yang paling kaku printf:

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

PS: Selalu kutip variabel Anda.

George Vasiliou
sumber
1
Dokumentasi dan standar menggunakan istilah "null" untuk variabel yang disetel ke string kosong (sebagai lawan dari variabel yang tidak disetel). Saya mengambil kebebasan mengedit.
ilkkachu
8

Seperti yang sudah dijelaskan George Vassiliou , itu karena Anda yang mencetak variabel, $BUILDNUMBER_bukan $BUILDNUMBER. Cara terbaik untuk mendapatkan apa yang Anda inginkan adalah menggunakan ${BUILDNUMBER}_seperti yang dijelaskan George. Berikut ini beberapa opsi:

$ echo "$BUILDNUMBER"_
230_
$ echo $BUILDNUMBER"_"
230_
$ printf '%s_\n' "$BUILDNUMBER"
230_
terdon
sumber
Kami tahu apa yang variabel simpan, tetapi kami tidak tahu apa yang $IFSberlaku, jadi echo $BUILDNUMBER"_"masih salah. Dari ketiganya, hanya printf '%s_\n' "$BUILDNUMBER"benar jika kita tidak tahu apa $BUILDNUMBERatau $IFSpegang.
Stéphane Chazelas