tom*_*234 13 linux string bash shell
非常有趣的是,如果您打算使用代码使用bash显示"0_1"
x=0
y=1
echo "$x_$y"
Run Code Online (Sandbox Code Playgroud)
然后它只会显示
1
Run Code Online (Sandbox Code Playgroud)
我试过0_1但它不起作用.
所以我的问题是如何回显形式$ x_ $ y?我将在文件名字符串上使用它.
pax*_*blo 23
因为变量名允许包含下划线,所以命令:
echo "$x_$y"
Run Code Online (Sandbox Code Playgroud)
试图回声${x_}(在你的情况下可能是空的)接着是${y}.这是因为参数扩展是一个贪婪的操作 - 在$形成变量名之后,它将需要尽可能多的合法字符.
bash联机帮助页的相关部分说明:
该
$角色引入了参数扩展,命令替换或算术扩展.要扩展的参数名称或符号可以用大括号括起来,大括号是可选的,但用于保护变量从紧跟在其后面的字符扩展,这些字符可以被解释为名称的一部分.
使用大括号时,匹配的结束大括号是第一个
}不用反斜杠或带引号的字符串转义的,而不是嵌入式算术扩展,命令替换或参数扩展.
因此,该解决方案是确保_被不作为第一变量,它是可以做到的一部分进行处理:
echo "${x}_${y}"
Run Code Online (Sandbox Code Playgroud)
我倾向于像我这样做所有的 bash变量,甚至是独立的变量,例如:
echo "${x}"
Run Code Online (Sandbox Code Playgroud)
因为它更明确,我在过去被咬过很多次:-)
用花括号包裹它:
echo "${x}_${y}"
只是为了逆转潮流,您也可以这样做:
echo $x'_'$y
Run Code Online (Sandbox Code Playgroud)
您可以将引用和不引用的部分彼此相邻,两者之间没有空格.并且由于'不是变量名的合法字符,bash将仅替换$x.:)