zoukankan      html  css  js  c++  java
  • Shell 中test 单中括号[] 双中括号[[]] 的区别

    Shell test 单中括号[] 双中括号[[]] 的区别

    在写Shell脚本的时候,经常在写条件判断语句时不知道该用[] 还是 [[]],首先我们来看他们的类别:

    
    $type [ [[ test
    [ is a shell builtin
    [[ is a shell keyword
    test is a shell builtin
    
    

    [ test 是 Shell 的内部命令,而[[是Shell的关键字。

    
    $test -f settings.py && echo True
    True
    
    $[ -f settings.py ] && echo True
    True
    
    

    [ test 是相等的。

    
    $[ 2 < 1 ] && echo True || echo False
    True
    
    $[[ 2 < 1 ]] && echo True || echo False
    False
    
    

    既然是命令, 它就和参数组合为一体被 shell 解释,那样比如 ">" "<" 就被 shell 解释为重定向符号了。关键字却不这样。

    
    x=1
    y=1
    
    
    $[ $x == 1 && $y == 1 ] && echo True || echo False
    -bash: [: missing `]'
    False
    
    
    $[[ $x == 1 && $y == 1 ]] && echo True || echo False
    True
    
    
    $[ $x == 1 -a $y == 1 ] && echo True || echo False
    True
    
    

    [[中使用&&||表示逻辑与和逻辑或。[ 中使用 -a -o 表示逻辑与和逻辑或。

    
    $[[ 'abcd' == a*d ]] && echo True || echo False
    True
    
    
    $[ 'abcd' == a*d ] && echo True || echo False
    False
    
    

    [[支持字符串的模式匹配,使用=~操作符时甚至支持shell的正则表达式。字符串比较时可以把右边的作为一个模式,而不仅仅是一个字符串,比如[[ hello == hell? ]],结果为真。[[ ]] 中匹配字符串或通配符,不需要引号。

    总结:

    使用[[ ... ]]条件判断结构,而不是[ ... ],能够防止脚本中的许多逻辑错误。比如,&&、||、<和> 操作符能够正常存在于[[ ]]条件判断结构中,

    但是如果出现在[ ]结构中的话,会报错。比如可以直接使用if [[ $a != 1 && $a != 2 ]]

    如果不使用双括号, 则为if [ $a -ne 1] && [ $a != 2 ]或者if [ $a -ne 1 -a $a != 2 ]

    bash把双中括号中的表达式看作一个单独的元素,并返回一个退出状态码。

    
    $[ !(pip list | grep pip) ] && echo True || echo False
    -bash: [: too many arguments
    False
    
    
    $[[ !(pip list | grep pip) ]] && echo True || echo False
    True
    
    

    参考

    http://blog.csdn.net/taiyang1987912/article/details/39551385
    http://blog.csdn.net/yongan1006/article/details/7195303
    
  • 相关阅读:
    jxl 单元格画斜线
    阿里云 tomcat 配置 注意
    java 的 数据库连接测试类 (SQL server)
    关于使用jackson.jar解析JSON时,大写JSON key值发生报错的问题
    JS配置文件动态加载CSS,js和定义请求路径
    SQL SERVER 2008升级SQL SERVER 2008 R2或者10.00.1600升级10.50.1600
    IDEA 启动运行的tomcat服务器项目,只能使用localhost访问的解决方法:
    舞会
    01序列
    交错01串
  • 原文地址:https://www.cnblogs.com/zeweiwu/p/5485711.html
Copyright © 2011-2022 走看看