我正在查看Node.js的NodeSource安装脚本的源代码。
在代码中,当他们想比较两个字符串时,他们在比较之前将X
放在两边:
if [[ "X${NODENAME}" == "XNode.js 10.x" ]]; then
我被指向网络上的一些问题:
- 在shell变量比较的两边添加前缀到字符串字面值的目的是什么? 为什么shell脚本比较经常使用x$VAR = xyes?
- 为什么在POSIX sh的' test '/'['字符串比较中附加额外的字符?
它们都解释了为什么在与[
比较时这是必要的。但在这种情况下,比较的是[[
。
[[
真的需要这种技术吗?
感谢@danielhoherd,在评论
不,没必要。
事实上,这种技术对于[
也是过时的,正如在SC2268 shellcheck规则中所解释的那样:
避免在比较中使用x前缀,因为它不再起作用。
[…]
如果第一个参数以破折号开始,或者由
!
或(
组成,一些旧的shell会感到困惑。作为一种变通方法,人们会用x
为变量和值加上前缀,以确保左侧总是以字母数字字符开头。POSIX确保这不是必需的,所有现代shell现在都遵循此规则。
[…]