Bash if ; 返回true

本周一直在学习bash,遇到了一个障碍。

#!/bin/sh if [ false ]; then echo "True" else echo "False" fi 

这将始终输出真,即使条件似乎表明否则。 如果我删除括号[]然后它的作品,但我不明白为什么。

您正在运行带有参数“false”的[ (aka test )命令,而不运行命令false 。 由于“false”是非空string,所以test命令总是成功的。 要真正运行命令,请删除[命令。

 if false; then echo "True" else echo "False" fi 

我发现我可以通过运行如下一些基本逻辑:

 A=true B=true if ($A && $B); then C=true else C=false fi echo $C 

使用真/假消除一些括号混乱…

 #! /bin/bash # true_or_false.bash [ "$(basename $0)" == "bash" ] && sourced=true || sourced=false $sourced && echo "SOURCED" $sourced || echo "CALLED" # Just an alternate way: ! $sourced && echo "CALLED " || echo "SOURCED" $sourced && return || exit