shell true & false & test & [ ] & [[ ]]


 

shell中true & false是兩個命令,其返回值為NULL,true 的 exit code為0,false 的exit code 為 1

 

 

  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

     

     

  2. #!/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 是被當作了字符串,非空,為真

  3. #!/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當作命令執行,報錯

  4. 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

     

  5. #!/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判斷的

  6. #!/bin/env sh if [[ `$1` == '' ]] ;then echo true else echo false fi

     

     加上反引號,shell會把 ``里面的內容當作命令執行,前面說過 false & true的返回值為NULL

     

     55被shell當作了命令執行


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM