为什么在bash中与'[[]'比较相等之前,要在两个字符串前添加一个字符?



我正在查看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现在都遵循此规则。

[…]

最新更新