在Linux 命令行中,William Shotts 声称字符范围可能存在问题。请参阅下面的相关摘录,重点是我的。
字符范围
如果您来自另一个类 Unix 环境或正在阅读有关此主题的其他书籍,您可能遇到过
[A-Z]
和[a-z]
字符范围表示法。这些是传统的 Unix 符号,也适用于旧版本的 Linux。它们仍然可以工作,但您必须小心使用它们,因为除非配置正确,否则它们不会产生预期的结果。现在,您应该避免使用它们,而是使用字符类。
他最后几句话在说什么?POSIX 标准对此有何评论?
这很可能是指具有交替排列的大写和小写字符的语言环境,而不是第一个,然后是另一个:
但是,适当的字符类有效:
但也可能不仅仅是
a
匹配z
:如果你想避免这种情况,并且只匹配英文小写字母
a
,z
Bash 特别有一个选项来解释 ASCII 顺序中的范围:而且您始终可以强制使用默认的整理顺序:
至于 POSIX 所说的,在我看来,括号表达式中的范围在默认 POSIX 之外的语言环境中未定义。模式匹配描述是指括号表达式的正则表达式描述,它说: