Shell脚本测试

5 bash shell command-line

我想更新一个别人写的bash脚本,而且我遇到了一条我不确定的问题.

谁能告诉我以下检查的作用:

if [ :$RESULT != :0,0 ]
Run Code Online (Sandbox Code Playgroud)

我假设它在$ RESULT中检查一些值,可能有一个子串?

任何帮助赞赏!

sou*_*rge 12

该命令[只是命令的别名,test右边的方括号只是sytax sugar([如果它是一个右括号,命令会忽略最后一个参数),所以该行实际读取

if test :$RESULT != :0,0
Run Code Online (Sandbox Code Playgroud)

它比较字符串是否:$RESULT等于字符串:0,0.对于变量$RESULT为空的情况,前缀为冒号.如果省略冒号并且$RESULT是空字符串,则该行将如下所示:

if test  != 0,0
Run Code Online (Sandbox Code Playgroud)

这会导致错误,因为test之前需要一个参数!=.另一种方法是使用引号来表示存在一个参数,这是一个空字符串:

if test "$RESULT" != 0,0
# Will become
if test "" != 0,0
Run Code Online (Sandbox Code Playgroud)

但是,您发布的变体更具便携性.


Ror*_*ory 5

我认为这:是人们在变量为空的情况下使用的常见技巧.

如果它是空的,那么shell将具有:

if [  != 0,0 ]
Run Code Online (Sandbox Code Playgroud)

这将是一个语法错误.把:在前面意味着如果该变量是空的外壳具有这样的:

if [ : != :0,0 ]
Run Code Online (Sandbox Code Playgroud)

这不是语法错误,并且会(正确地)报告错误.