在bash脚本中,什么是 [...] 代表的意思?

3

我正在阅读这篇教程,发现bash脚本使用[...]作为通配符。那么在bash脚本中,[...]代表什么意思呢?

3个回答

6
这是一种正则表达式风格的字符匹配语法;来自于Bash参考手册§3.5.8.1(模式匹配)

[...] 匹配方括号中的任意一个字符。由连字符分隔的一对字符表示一个范围表达式;使用当前区域设置的排序顺序和字符集,包括这两个字符之间的任何字符。如果跟在‘[’后面的第一个字符是‘!’‘^’,则匹配任何未被包含的字符。可以通过将‘−’作为集合中的第一个或最后一个字符来匹配‘−’。可以将‘]’作为集合中的第一个字符来匹配‘]’。范围表达式中字符的排序顺序由当前区域设置和LC_COLLATE shell变量的值(如果设置了)确定。

例如,在默认的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

一个字符类匹配属于该类的任何字符。单词字符类匹配字母、数字和字符‘_’
‘[’‘]’内,可以使用语法[=c=]指定等价类,它与具有相同排序权重(由当前语言环境定义)的字符c匹配。
‘[’‘]’内,语法[.symbol.]匹配排序符号symbol。
(最常见的用法模式已加粗)

5

在本教程中,它被用于讲解正则表达式以及globbing('*''?')。例如,[a-z] 正则表达式将匹配一个小写字母。


1

实际上,通配符是什么呢?例如[abc],它可以匹配三个字母中的任意一个。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接