Bash变量替换变量后跟下划线


12

该变量BUILDNUMBER设置为值230。我希望230_为该命令打印该消息,echo $BUILDNUMBER_但输出为空,如下所示。

# echo $BUILDNUMBER_

# echo $BUILDNUMBER
230

Answers:


27

该命令echo $BUILDNUMBER_将打印$BUILDNUMBER_未设置的变量的值(下划线是变量名的有效字符,如Jeff Schaller明确指出的那样)

您只需要在变量名周围加上花括号(大括号)或使用最严格的printf工具即可:

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

PS:总是引用您的变量。


1
文档和标准对设置为空字符串的变量(与未设置的变量相对)使用术语“空”。我拥有编辑的自由。
ilkkachu

8

正如George Vassiliou 解释的那样,这是因为您正在打印变量$BUILDNUMBER_而不是$BUILDNUMBER。获得所需的最佳方法是使用${BUILDNUMBER}_George解释的方法。以下是一些其他选项:

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

我们知道变量保存的内容,但我们不知道$IFS保存的内容,因此echo $BUILDNUMBER"_"仍然是错误的。在这三个中,只有printf '%s_\n' "$BUILDNUMBER"我们不知道$BUILDNUMBER或不知道是正确的$IFS
斯特凡Chazelas
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.