Thay thế biến Bash của biến theo sau là dấu gạch dưới


12

Biến BUILDNUMBERđược đặt thành giá trị 230. Tôi dự kiến 230_sẽ được in cho lệnh echo $BUILDNUMBER_nhưng đầu ra trống như dưới đây.

# echo $BUILDNUMBER_

# echo $BUILDNUMBER
230

Câu trả lời:


26

Lệnh echo $BUILDNUMBER_sẽ in giá trị của biến $BUILDNUMBER_không được đặt (gạch dưới là ký tự hợp lệ cho tên biến như được lưu ý rõ ràng bởi Jeff Schaller)

Bạn chỉ cần áp dụng dấu ngoặc nhọn (dấu ngoặc nhọn) xung quanh tên biến hoặc sử dụng printfcông cụ cứng nhất :

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

PS: Luôn trích dẫn các biến của bạn.


Tài liệu và tiêu chuẩn sử dụng thuật ngữ "null" cho một biến được đặt thành một chuỗi rỗng (trái ngược với biến không đặt). Tôi đã tự do chỉnh sửa.
ilkkachu

8

Như George Vassiliou đã giải thích , đó là vì bạn đang in biến $BUILDNUMBER_thay vì $BUILDNUMBER. Cách tốt nhất để có được những gì bạn muốn là sử dụng ${BUILDNUMBER}_như George giải thích. Dưới đây là một số tùy chọn khác:

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

Chúng tôi biết những gì biến giữ, nhưng chúng tôi không biết những gì $IFSgiữ, vì vậy echo $BUILDNUMBER"_"vẫn còn sai. Trong ba, chỉ printf '%s_\n' "$BUILDNUMBER"đúng nếu chúng ta không biết cái gì $BUILDNUMBERhoặc $IFSgiữ.
Stéphane Chazelas
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.