[和[[在Bash中有什么区别?

我看着bash手册页, [[它说使用条件表达式。 然后我查看了条件表达式部分,它列出了与test (和[ )相同的运算符。

所以我想知道, [[[在Bash中有什么区别?


[[是bash对[命令]的改进。 如果您编写以bash为目标的脚本,它具有多项增强功能,因此是更好的选择。 我的最爱是:

  • 它是shell的语法特征,所以它有一些[没有的特殊行为。 你不再需要像疯了一样引用变量,因为[[更直观地处理空白字符串和空白字符串。 例如, [你必须写

    if [ -f "$file" ]
    

    正确处理空字符串或其中包含空格的文件名。 与[[报价是不必要的:

    if [[ -f $file ]]
    
  • 由于它是一种语法功能,因此可以使用&&|| 用于布尔测试的运算符和用于字符串比较的<>[不能这样做,因为它是一个常规命令, &&||<>不作为命令行参数传递给常规命令。

  • 它有一个美妙的=~运算符来进行正则表达式匹配。 用[你可能会写

    if [ "$answer" = y -o "$answer" = yes ]
    

    随着[[你可以写成这样

    if [[ $answer =~ ^y(es)?$ ]]
    

    它甚至可以让你访问存储在BASH_REMATCH的捕获组。 例如,如果您在上面输入完整的“是”,则${BASH_REMATCH[1]}将是“es”。

  • 你可以免费获得模式匹配又名globbing。 也许你对如何输入yes不太严格。 如果用户输入任何东西,也许你没事。 你有覆盖:

    if [[ $ANSWER = y* ]]
    
  • 请记住,这是一个bash扩展名,所以如果你正在编写sh兼容的脚本,那么你需要坚持[ 。 如果您使用双括号,请确保您的脚本具有#!/bin/bash shebang行。

    也可以看看

  • Bash常见问题 - “测试与[和[[?”之间的区别是什么?
  • Bash实践 - Bash测试
  • 服务器故障 - bash中的双括号和单括号之间的区别是什么?

  • [与内置test相同,并且像test二进制文件(man test)一样工作
  • 的作用与[在许多类UNIX环境中的所有其他基于sh的shell中一样
  • 仅支持单个条件。 用bash &&||多重测试 操作员必须在单独的括号内。
  • 本身不支持“不”运营商。 要反转一个条件,请使用! 在第一个支架之外使用shell的工具来反转命令返回值。
  • ==!=是文字字符串比较
  • [[是一个bash
  • 是特定于bash的,但其他shell可能已经实现了类似的构造。 不要指望它在一个老派的UNIX sh中。
  • ==!=应用bash模式匹配规则,请参阅man bash “模式匹配”
  • 有一个=~正则表达式匹配运算符
  • 允许使用圆括号和!&&|| 括号内的逻辑运算符合并子表达式
  • 除此之外,它们非常相似 - 大多数单独的测试在它们之间以相同的方式工作,当需要将不同的测试与逻辑AND / OR / NOT操作组合时,事情才会变得有趣。


    在bash中,与[[[防止变量值的字分割相反。

    链接地址: http://www.djcxy.com/p/17525.html

    上一篇: What's the difference between [ and [[ in Bash?

    下一篇: read file name from text file in ksh and compress