การแทนที่ตัวแปร Bash ของตัวแปรตามด้วยขีดล่าง


12

ตัวแปรBUILDNUMBERถูกตั้งค่าเป็น 230 ฉันคาดว่า230_จะพิมพ์สำหรับคำสั่งecho $BUILDNUMBER_แต่เอาต์พุตว่างเปล่าดังแสดงด้านล่าง

# echo $BUILDNUMBER_

# echo $BUILDNUMBER
230

คำตอบ:


27

คำสั่งecho $BUILDNUMBER_จะพิมพ์ค่าของตัวแปร$BUILDNUMBER_ที่ไม่ได้ตั้งค่า (ขีดล่างเป็นอักขระที่ถูกต้องสำหรับชื่อตัวแปรตามที่ระบุไว้อย่างชัดเจนโดย Jeff Schaller)

คุณเพียงแค่ต้องใช้วงเล็บปีกกา (วงเล็บปีกกา) รอบชื่อตัวแปรหรือใช้printfเครื่องมือที่เข้มงวดที่สุด:

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

PS: พูดตัวแปรของคุณเสมอ


1
เอกสารและมาตรฐานใช้คำว่า "null" สำหรับชุดตัวแปรเป็นสตริงว่าง (ตรงข้ามกับตัวแปรที่ไม่ได้ตั้งค่า) ฉันใช้เสรีภาพในการแก้ไข
ilkkachu

8

ขณะที่จอร์จ Vassiliou แล้วอธิบายว่าเป็นเพราะคุณพิมพ์ตัวแปรแทน$BUILDNUMBER_ $BUILDNUMBERวิธีที่ดีที่สุดในการได้รับสิ่งที่คุณต้องการคือการใช้${BUILDNUMBER}_ตามที่จอร์จอธิบาย นี่คือตัวเลือกเพิ่มเติม:

$ echo "$BUILDNUMBER"_
230_
$ echo $BUILDNUMBER"_"
230_
$ printf '%s_\n' "$BUILDNUMBER"
230_

เรารู้ว่าตัวแปรเก็บอะไร แต่เราไม่รู้ว่า$IFSเก็บอะไรดังนั้นecho $BUILDNUMBER"_"ก็ยังผิด จากสามข้อprintf '%s_\n' "$BUILDNUMBER"นั้นถูกต้องก็ต่อเมื่อเราไม่รู้ว่ามีอะไร$BUILDNUMBERหรือ$IFSถืออยู่
Stéphane Chazelas
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.