bash:如果条件不起作用,基本条件是什么?(字符串比较)
在bash中运行此脚本时:bash:如果条件不起作用,基本条件是什么?(字符串比较),bash,if-statement,comparison,string-comparison,boolean-expression,Bash,If Statement,Comparison,String Comparison,Boolean Expression,在bash中运行此脚本时: #/bin/bash str=“否” 如果[“$str”=“是”];然后 回显“条件1为真” fi 如果[“$str”==“是”];然后 回显“条件2为真” fi 如果[“$str”=“是”];然后 回显“条件3为真” fi 如果[“$str”==“是”];然后 回显“条件4为真” fi 如果(“$str”=“是”);然后 回显“条件5为真” fi 如果(“$str”=”是“);然后 echo“条件6为真” fi 令我惊讶的是,我得到了: 条件1为真 条件2为真 条
#/bin/bash
str=“否”
如果[“$str”=“是”];然后
回显“条件1为真”
fi
如果[“$str”==“是”];然后
回显“条件2为真”
fi
如果[“$str”=“是”];然后
回显“条件3为真”
fi
如果[“$str”==“是”];然后
回显“条件4为真”
fi
如果(“$str”=“是”);然后
回显“条件5为真”
fi
如果(“$str”=”是“);然后
echo“条件6为真”
fi
令我惊讶的是,我得到了:
条件1为真条件2为真
条件3为真
条件4为真
条件5为真
条件6是正确的 请注意,
$str
设置为否
,而不是是
我不完全理解=
和=
之间的区别(至少,在这个bash上下文中,我是用其他语言理解的),或者把if条件放在单[…]
或双[…]
或双(…)
括号中
然而,我这里显然有点不对劲,但我看不出来?你需要用空格分隔等号。例如:
#!/bin/bash
str="no"
if [ "$str" = "yes" ]; then
echo "condition 1 is true"
fi
…首先,在操作符周围没有空格,实际上是在测试(例如) 将计算为true(非空字符串)
[…]
正在使用[
外部测试命令(大概是/bin/[
)进行测试,[…]
是shell(例如bash或ksh)内置测试。对于测试=
和=
具有相同的含义。对于内置测试([…]]
)实际上是针对模式匹配进行计算的:即[[yeees==y*s]]
也是正确的
(…)
是算术求值。=
是赋值,=
测试相等性。在我的例子中(可以归结为bash版本)#5实际上会产生false,除非我事先将yes=1
设置为赋值的求值返回值……在本例中,新变量名为no
,因为这是str
指出的(已解决)对于比较,如果两个变量的值相等,则此算术比较将返回true…字面意思是((no==yes))
或在测试语法中[[“$no”-eq“$yes”]]
。如果既没有设置否
也没有设置是
,则会比较两个0。尝试在shellcheck.net输入代码。在=
内部[]
和[[]]
(())
仅用于算术表达式。
[ "no=yes" ]