如果你打算使用的代码,显示一个类似“0_1”使用bash这是非常有趣
x=0
y=1
echo "$x_$y"
那么它只会显示
1
我尝试echo "$x\_$y"
,它不工作。
所以我的问题是如何回应的形式$ X_ $ Y? 我将它用在一个文件名字符串。
如果你打算使用的代码,显示一个类似“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
。 :)