shell中true & false是兩個命令,其返回值為NULL,true 的 exit code為0,false 的exit code 為 1
-
#!/bin/env sh if [[ `$1` ]];then echo true else echo false fi
把false作為命令執行,其返回值為NULL
#!/bin/env sh if [[ '' ]];then echo true else echo false fi
-
#!/bin/env sh if [[ $1 ]];then echo true else echo false fi
上述注意點是在 [ ] 或 [[ ]] 中,false是作為了字符串進行比較,相當於 [[ -n false ]]
#!/bin/env sh if [[ -n $1 ]];then echo true else echo false fi
類似還有#!/bin/env sh if [[ 0 ]];then echo true else echo false fi
0 是被當作了字符串,非空,為真
-
#!/bin/env sh if $1 ;then echo true else echo false fi
上述將false作為命令執行,看完下面例子就會明白了
#!/bin/env sh if 0 ;then echo true else echo false fi
0 被shell當作命令執行,報錯
-
if sh -c "exit 1"; then echo Shell exited as true; else echo Shell exited as false; fi if sh -c "exit 0"; then echo Shell exited as true; else echo Shell exited as false; fi
-
#!/bin/env sh if [[ $1 -eq true ]] ;then echo true else echo false fi
居然為true
shell中 -eq -ne -gt -lt -ge -le 等是用作integer比較的
上述 會將 false 和 true 轉換為 integer 0 后比較,當時是等價的b為字符串,被動態轉換為 0 與 2相加,故運算后為 2
所有要將其作為字符串進行比較必須使用 == 或 = ,當然 integer的比較也是可以用 == 或 =#!/bin/env sh if [[ $1 == true ]] ;then echo true else echo false fi
此外 -n -z 也是STRING判斷的
-
#!/bin/env sh if [[ `$1` == '' ]] ;then echo true else echo false fi
加上反引號,shell會把 ``里面的內容當作命令執行,前面說過 false & true的返回值為NULL
55被shell當作了命令執行