bash脚本中的[...]代表什么?

BЈо*_*вић 3 linux bash scripting

我正在阅读教程,我遇到了bash脚本使用[...]作为外卡字符.那么究竟什么[...]站在bash脚本中?

Mat*_*lia 6

它是一种正则表达式的字符匹配语法; 来自Bash参考手册,§3.5.8.1(模式匹配):

[...] 匹配任何一个包含的字符.用连字符分隔的一对字符表示范围表达式; 使用当前区域设置的整理顺序和字符集在这两个字符之间进行排序的任何字符都是匹配的.如果后面的第一个字符‘[’是a ‘!’或a,‘^’那么任何未包含的字符都匹配.‘?’可以通过将其包括为集合中的第一个或最后一个字符来匹配A. ‘]’可以通过将其包括为集合中的第一个字符来匹配A. 范围表达式中字符的排序顺序由当前语言环境和LC_COLLATEshell变量的值(如果已设置)确定.

例如,在默认的C语言环境中,‘[a-dx-z]’相当于'[abcdxyz]'.许多语言环境按字典顺序对字符进行排序,并且在这些语言环境‘[a-dx-z]’中通常不等同于‘[abcdxyz]’; ‘[aBbCcDdxXyYz]’例如,它可能等同于.要获得括号表达式中范围的传统解释,可以通过将LC_COLLATELC_ALL环境变量设置为值来强制使用C语言环境‘C’.

‘[’和中‘]’,可以使用语法指定字符类[:class:],其中class是posix标准中定义的以下类之一:

          alnum   alpha   ascii   blank   cntrl   digit   graph   lower
          print   punct   space   upper   word    xdigit
Run Code Online (Sandbox Code Playgroud)

字符类匹配属于该类的任何字符.单词字符类匹配字母,数字和字符‘_’.

‘[’和中‘]’,可以使用语法指定等价类[=c=],该语法将具有相同排序权重(由当前区域设置定义)的所有字符与字符c匹配.

‘[’和中‘]’,语法[.symbol.]匹配整理符号符号.

(重点添加到最常见的使用模式)


Ben*_*ery 5

除了globbing('*''?')之外,本教程还使用它来讲述正则表达式.例如,[a-z]正则表达式将匹配一个小写字符.