在 bash 中运行此脚本将打印“hello”
if [ false ]; then
echo hello
fi
在 bash 中运行此脚本将打印“hello”
if [[ false ]]; then
echo hello
fi
只有当我去掉括号时,bash才不会打印“hello”
if false; then
echo hello
fi
我认为括号的整个前提是启用额外的功能,如
&&
和||
,为什么在这种情况下会适得其反?
编辑: 这就是 bash 引用的意思吗?仍然打印“你好”
test=false
if [[ "$test" ]]; then
echo hello
fi
if function_or_program; then
# do something
fi
这会检查
function_or_program
是否以 0
退出,如果退出,则执行 do something
块。
true
和 false
是分别以 0
和 1
退出的程序。
[
是一个程序(称为 test
),可用于测试字符串和数字。
[[
是一个与程序 test
类似的函数,但更强大,因为它是一个内置函数,调用起来可能更快。
因此,您观察到,当使用
[
和 [[
时,您正在测试 strings true
和 false
。所有不具有长度 0
的字符串都被视为 true,因此 true
和 false
都将被视为 true
。
我认为括号的整个前提是启用额外的功能,例如
和&&
,||
这就是
[
和 [[
中的功能。 if
本身仅检查您告诉它执行的一个函数或程序的结果。