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当作了命令执行

posted @   ascertain  阅读(5487)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示