美文网首页我用 LinuxlinuxLinux学习|Gentoo/Arch/FreeBSD
shell 单中括号双中括号和gt、>和加大括号引用变量的区别

shell 单中括号双中括号和gt、>和加大括号引用变量的区别

作者: 霡霂976447044 | 来源:发表于2020-03-17 20:29 被阅读0次

    1. 区别1: 在使用单中括号判断变量是否为空的时候不加括号可能会出现异常

    单括号就是test命令。test -n 判断变量是否不为空,如果不为空那么表达式返回0通过,如果是空那么表达式返回1不通过。0代表True,1代表False。test -z判断变量是否为空,如果为空表达式返回0,如果不为空返回False。下面以-z为例,演示中括号判断变量的问题。

    a=""
    [ -z $a ]
    echo $?  # 0
    a="1"
    [ -z $a ]
    echo $?  # 1
    

    看上去没有什么问题。现在看一下-n

    a="1"
    [ -z $a ]
    echo $?  # 0
    a=""
    [ -z $a ]
    echo $?  # 0
    

    我们可以看到-n不管怎么样都会通过。那么如何解决呢,可以两种解决方法:

    • 使用双引号包裹变量
    • 使用双中括号
    a=""
    [ -n "$a" ]
    echo $?  # 1
    [[ -n $a ]]
    echo $?  # 1
    

    2 区别2: 双括号使用&&单括号使用-a语法进行多重判断

    [ 1 -gt 3 -a 1 -gt 3 ]
    [[ 1 -gt 3 && 1 -gt 3 ]]
    

    3 区别3: 正则匹配变量值只能用在双中括号

    [[ $tel =~ [0-9]{10} ]]
    

    4 区别4: >在单括号使用需要加上\

    PS:貌似zsh不支持,所以使用>最好使用双括号

    5 >-gt的区别

    > 比较的是对应字符ascii码,-gt比较的一定要为数字

    6 加大括号引用变量区别

    很简单,加大括号可以在引用变量的时候明确那个变量

    ➜  ~ a="zhangsan"
    ➜  ~ echo ${a}bc 
    zhangsanbc
    ➜  ~ 
    

    不加大括号就变成引用变量abc了

    最后,尽量使用双中括号。

    相关文章

      网友评论

        本文标题:shell 单中括号双中括号和gt、>和加大括号引用变量的区别

        本文链接:https://www.haomeiwen.com/subject/disxyhtx.html