ChennyStar Asked: 2022-01-24 20:53:55 +0800 CST2022-01-24 20:53:55 +0800 CST 2022-01-24 20:53:55 +0800 CST Shell - 负文件通配 772 在 Bash 中,要进行否定文件 globbing,我有以下 2 个选择。它们之间有区别吗?两者都返回相同的结果: $ ls f1.txt f2.txt f3.txt f4.txt $ ls f[!24]* f1.txt f3.txt $ ls f[^24]* f1.txt f3.txt bash shell 1 个回答 Voted Best Answer they 2022-01-24T22:19:06+08:002022-01-24T22:19:06+08:00 该[!...]模式匹配不属于...方括号内集合的单个字符。这是 POSIX shell 使用的文件名通配模式。 该[^...]模式的工作方式相同,但它是一个 POSIX 正则表达式。这种模式通常不能作为文件名通配模式移植到其他 shell,但bashshell 会识别它并将其视为与[!...]模式相同。 如果您在编写文件名通配模式时可以在这两者之间进行选择,那么您很可能应该使用可移植的 POSIX 变体[!...]。 POSIX 标准一般说的是文件名[...]通配模式: 如果像 XBD RE Bracket Expression 中一样,左括号引入括号表达式,除了<exclamation-mark>字符 ( !) 应替换<circumflex>字符 ( ^) 在正则表达式表示法中的非匹配列表中的角色之外,它应引入模式括号表达式。以不带引号的字符开头的括号表达式<circumflex>会产生未指定的结果。否则,[应匹配字符本身。 “XBD RE 括号表达式”是正则表达式中的规范[...]。 该标准[^...]在文件名通配模式中“未指定”使用 ,并且bashshell(和其他一些)选择将其实现为与[!...].
该
[!...]
模式匹配不属于...
方括号内集合的单个字符。这是 POSIX shell 使用的文件名通配模式。该
[^...]
模式的工作方式相同,但它是一个 POSIX 正则表达式。这种模式通常不能作为文件名通配模式移植到其他 shell,但bash
shell 会识别它并将其视为与[!...]
模式相同。如果您在编写文件名通配模式时可以在这两者之间进行选择,那么您很可能应该使用可移植的 POSIX 变体
[!...]
。POSIX 标准一般说的是文件名
[...]
通配模式:“XBD RE 括号表达式”是正则表达式中的规范
[...]
。该标准
[^...]
在文件名通配模式中“未指定”使用 ,并且bash
shell(和其他一些)选择将其实现为与[!...]
.