我正在阅读Gitlab的源代码,以了解有关其工作原理的更多信息。在项目根目录内的run
bash script中,看到以下内容:
if [ "x$GDK_RUNIT" = "x1" ]; then
...
fi
我知道此条件的目的是检查GDK_RUNIT
envar的值是否设置为等于1
,并且在这种情况下以非零返回码退出。我的问题是,以上代码与以下代码有什么区别?
if ["$GDK_RUNIT" = "1" ]; then
...
fi
换句话说,在envar名称和“ 1”之前放置“ x”的目的是什么?
我检查了man test
中与x
相关的任何内容(因为我知道if
和test
在功能上是等效的),但我所看到的只是-x
旗。
x$GDK_RUNIT
对我来说似乎不是一个标志,所以我认为man
页面的内容不相关。
答案 0 :(得分:2)
完全没有必要。 test
的 old 实现无法处理空参数,因此,如果GDK_RUNIT
未定义或为空,则避免使用[ "" = "1" ]
的等效项,而将其替换为改为[ "x" = "x1" ]
。几乎任何字符或字符串都可以代替x
,但是x
的使用是常规的。
但是,没有合理的现代实现方式,当然也没有bash
的实现方式会出现此问题。