bash中if语句的正确测试是什么?我不确定第二条语句是否分配了值或是否测试了等效性。
if [[ "$user_has_mfa" == "NO" ]]; then
.... do stuff...
fi
或
if [[ "$user_has_mfa" = "NO" ]]; then
.. do stuff..
fi
答案 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