正确测试Bash中if语句中的值

时间:2019-02-08 20:08:33

标签: bash

bash中if语句的正确测试是什么?我不确定第二条语句是否分配了值或是否测试了等效性。

if [[ "$user_has_mfa" == "NO" ]]; then
   .... do stuff...
fi

if [[ "$user_has_mfa" = "NO" ]]; then
  .. do stuff..
fi

3 个答案:

答案 0 :(得分:4)

它们是等效的。来自Bash manual

string1 == string2
string1 = string2
     

如果字符串相等,则为真。 =应该与test命令一起使用以实现POSIX一致性。与[[命令一起使用时,它将执行如上所述的模式匹配(复合命令)。

答案 1 :(得分:4)

=是条件表达式中字符串相等的标准运算符。 [[ ... ]]命令中没有赋值运算符,因此=bash的{​​{1}}运算符之间没有歧义;它们是等效的。

对于==[ only 可移植运算符。 =允许==,但bash不允许。如果您担心可移植性,那么只能接受dash

在算术上下文中,由于允许分配,在[ "$user_has_mfa" = "NO" ]=之间存在 差异。 ==代表分配,=代表相等性测试。例如:

==

您还会遇到C程序员需要担心的相同类型的“写$ x=0 # shell assignment $ ((x = 3)) # arithmetic assignment $ if (( x == 3 )); then echo "x is 3"; fi x is 3 ”错误,这是C程序员需要担心的。

=

答案 2 :(得分:1)

等于1就可以了。

if [[ "$user_has_mfa" = "NO" ]]; then
  .. do stuff..
fi

您可以使用

-eq     for integers
=, ==   for strings