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

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.


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_

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.