shell true & false & test & [ ] & [[ ]]
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当作了命令执行 
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号