我将尝试翻译一段其他人编写的Bash脚本,并遇到了一行代码,不确定其具体含义。
请问有谁能告诉我以下检查的作用:
if [ :$RESULT != :0,0 ]
我猜它是在检查$RESULT中的某个值,可能是子字符串?
非常感谢您的帮助!
我将尝试翻译一段其他人编写的Bash脚本,并遇到了一行代码,不确定其具体含义。
请问有谁能告诉我以下检查的作用:
if [ :$RESULT != :0,0 ]
我猜它是在检查$RESULT中的某个值,可能是子字符串?
非常感谢您的帮助!
[
命令只是 test
命令的一个别名,右方括号只是语法糖(如果最后一个参数是右方括号,则 [
命令将忽略它),因此该行实际上读作:
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
你发布的这个变量更具可移植性。
:
这个技巧。如果变量为空,那么shell会有以下结果:if [ != 0,0 ]
这将是一个语法错误。在变量前面加上:
的意思是,如果变量为空,shell会执行以下操作:
if [ : != :0,0 ]
这不是语法错误,会(正确地)报告 false。
x
被用在和冒号类似的方式中,就像你的例子一样。if [[ $RESULT != 0,0 ]]
双括号形式提供更多的灵活性,改善了可读性,减少了转义和引用的需求,并提供了一些其他功能。请参见this page以获取更多信息。
如果您想测试数字值,而不是字符串或文件,请使用双括号:
if (( 3 + 4 > 6 ))
man bash
命令并搜索内置命令test
以获取更多信息。 - soulmerge0,0
是一个字符串,运算符!=
比较的是字符串,所以它检查$RESULT
是否为字符串0,0
。尝试使用man test
命令。 - soulmerge