非常有趣的是,如果您打算0_1
使用 Bash 显示代码
x=0
y=1
echo "$x_$y"
那么它只会显示
1
我试过echo "$x\_$y"
了,它不起作用。
如何回显表单$x_$y
?我将在文件名字符串上使用它。
因为变量名中允许有下划线,所以命令:
echo "$x_$y"
正在尝试回显${x_}
(在您的情况下可能为空),然后是${y}
. 这样做的原因是因为参数扩展是一个贪婪的操作——它会在 之后尽可能多的合法字符$
来形成一个变量名。
手册页的相关部分bash
指出:
该
$
字符引入了参数扩展、命令替换或算术扩展。要扩展的参数名称或符号可以用大括号括起来,这是可选的,但用于保护要扩展的变量免受紧随其后的字符的影响,这些字符可以解释为名称的一部分。
当使用大括号时,匹配的结束大括号是第一个
}
不被反斜杠转义或在带引号的字符串中,并且不在嵌入的算术扩展、命令替换或参数扩展中。
因此,解决方案是确保_
不被视为第一个变量的一部分,这可以通过以下方式完成:
echo "${x}_${y}"
我倾向于像这样做我所有的 bash 变量,甚至像这样的独立变量:
echo "${x}"
因为它更明确,而且我过去被咬过很多次:-)
这边走:
$ echo "${x}_${y}"
0_1
用花括号括起来:
echo "${x}_${y}"
只是为了逆势而上,你也可以这样做:
echo $x'_'$y
您可以将引用和未引用的部分彼此相邻,中间没有空格。而且由于'
不是变量名的合法字符,bash 将仅替换$x
. :)