Bash Shell脚本测试

Bash Shell脚本测试,bash,shell,command-line,Bash,Shell,Command Line,我想更新别人写的bash脚本,但我遇到了一行我不确定的代码 有人能告诉我以下支票的用途吗: if [ :$RESULT != :0,0 ] 我假设它正在检查$RESULT中的某个值,可能有一个子字符串 感谢您的帮助 我认为:是人们在变量为空时常用的技巧 如果为空,则外壳将具有以下内容: if [ != 0,0 ] 这将是一个语法错误。将:放在前面意味着如果变量为空,则shell具有以下内容: if [ : != :0,0 ] 这不是语法错误,并且会(正确地)报告false。[命令只是命令

我想更新别人写的bash脚本,但我遇到了一行我不确定的代码

有人能告诉我以下支票的用途吗:

if [ :$RESULT != :0,0 ]
我假设它正在检查$RESULT中的某个值,可能有一个子字符串


感谢您的帮助

我认为
是人们在变量为空时常用的技巧

如果为空,则外壳将具有以下内容:

if [  != 0,0 ]
这将是一个语法错误。将
放在前面意味着如果变量为空,则shell具有以下内容:

if [ : != :0,0 ]

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

[
命令只是命令test的别名,结束方括号只是sytax sugar(如果是结束方括号,则该命令将忽略最后一个参数),因此该行实际读取

if test :$RESULT != :0,0
它比较字符串
:$RESULT
是否等于字符串
:0,0
。冒号在变量
$RESULT
为空的情况下加上前缀。如果省略冒号且
$RESULT
为空字符串,则该行如下所示:

if test  != 0,0
if test "$RESULT" != 0,0
# Will become
if test "" != 0,0
这将导致错误,因为
test
要求在
!=
之前有一个参数。另一种方法是使用引号表示存在一个参数,该参数是空字符串:

if test  != 0,0
if test "$RESULT" != 0,0
# Will become
if test "" != 0,0

不过,您发布的变体更便于携带。

有时您会看到一个
x
,其使用方式与示例中冒号的使用方式相同

在Bash中进行此类测试的首选方法是使用双方括号:

if [[ $RESULT != 0,0 ]]
双括号形式允许更大的灵活性、更好的可读性、减少转义和引用的需要以及更多的一些功能。有关更多信息,请参阅

如果要测试数值,而不是字符串或文件,请使用双括号:

if (( 3 + 4 > 6 ))

请尝试
manbash
并搜索内置命令
test
以获取更多信息好的,我遵循这一点,谢谢!那么它实际上是在与字符串“0,0”进行比较吗?我只是问,因为变量结果永远不会有那个值!我想知道0,0是否还有其他作用。可能是一个空白字符串?不,
0,0
是一个字符串,运算符
!=
比较字符串,所以它会检查
$result
是否是字符串
0,0
。尝试
人工测试
。只做了一些小测试,你就成功了的确,完全正确。谢谢!