final=''
if [ $final ]; then echo "final"; else echo "not final"; fi;
看上面这段代码。如果我删除if
块中的
括号,它将如何应用以及为什么?
这就是我试图写条件的方式。那时我实际上忘记了语法。它在控制台中打印
final
。当时我就期待它能打印出not final
。 (我想我在某处读到,在 bash 条件下,空字符串的计算结果为 false)。虽然没有错误,但我知道语法有问题。
if $final; then printf "final"; else printf "not final"; fi;
然后我把它绕在括号上。现在它输出相反的结果。
not final
。
这些语句的
not
也给出没有任何错误的输出。现在我什么都看不懂了。
if [ $final ]; then printf "final"; else printf "not final"; fi;
输出:
not final
.
if ! $final; then printf "final"; else printf "not final"; fi;
输出:
not final
if [ ! $final ]; then printf "final"; else printf "not final"; fi;
输出:
final
.我正在 Windows 中的
git-bash
中运行这些。
if
后面是要执行的命令。它通过检查退出状态是否为 0(成功)或非零(失败)来测试该命令的成功或失败。
括号实际上是要执行的命令,而不是
if
命令语法的一部分(它们不像 C 等语言中的括号)。 [
相当于 test
命令。
所以当你写作时
if $final
它将执行
$final
的内容作为命令。如果 $final
为空,则执行空命令。这被认为是成功的,因此then
块被执行。如果你先这样做
final=something
然后做
if $final
您会收到一条错误消息,指出无法找到
something
。这是失败的,因此 else
块将被执行。
另一方面,当你写作时
if [ "$final" ]
它正在执行
test "$final"
。 test
命令只是检查其参数是否为空,并相应地设置其退出状态。