在if比较中添加"_"的原因"if ["_ $ str"="_"];然后....; fi"

MOH*_*MED 1 linux bash shell sh

我在shell脚本中多次看到他们"_"在if比较中使用,如下所示:

if [ "_$str" = "_" ]; then ....; fi
Run Code Online (Sandbox Code Playgroud)

上面的代码检查str变量是否为空,并进行比较if [ "_$str" = "_" ].

为什么不用if [ "$str" = "" ]?为什么要加"_"两个字符串?

Alf*_*lfe 11

据我所知,这是出于历史原因.曾经有(并且可能在一些模糊的系统上)炮弹处理空字符串(也许是以破折号开头的字符串).因此,通过添加前缀来完全防止空字符串(以及类似选项的外观)的简单想法.今天所有常见的炮弹都不再存在这些问题了.