首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通配符/通配符:字符范围有问题吗?

通配符/通配符:字符范围有问题吗?
EN

Unix & Linux用户
提问于 2019-03-10 17:17:53
回答 1查看 548关注 0票数 1

Linux命令行中,William声称字符范围可能存在问题。见下文有关摘录,重点是我。

Character范围如果您来自另一个类似Unix的环境,或者正在阅读有关这个主题的其他书籍,您可能遇到过[A-Z][a-z]字符范围标记。这些都是传统的Unix符号,也适用于较早版本的Linux。它们仍然可以工作,但是您必须小心它们,因为除非正确配置它们,否则它们不会产生预期的结果。现在,您应该避免使用它们,而应该使用字符类。

在最后几句话里他在说什么?POSIX标准对此有何说明?

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2019-03-10 17:56:52

这很可能是指具有大写和小写字符交替排列的区域设置,而不是第一个,然后是另一个:

代码语言:javascript
复制
$ echo "$LANG"
en_US.UTF-8
$ touch a A z Z
$ ls
A  Z  a  z
$ bash -c 'echo [a-z]'
a A z

但是,适当的字符类工作:

代码语言:javascript
复制
$ bash -c 'echo [[:lower:]]'
a z

但也可能不仅仅是az相匹配:

代码语言:javascript
复制
$ LANG=fi_FI.UTF-8
$ touch ä Ä ö Ö
$ bash -c 'echo [[:lower:]]'
a z ä ö

如果您想避免这种情况,并且只将英文小写字母az匹配,那么Bash尤其可以选择解释ASCII顺序中的范围:

代码语言:javascript
复制
$ bash -c 'shopt -s globasciiranges; echo [a-z]'
a z

而且您可以始终强制执行默认的排序顺序:

代码语言:javascript
复制
$ LC_COLLATE=C bash -c 'echo [a-z]'
a z

至于POSIX说什么,在我看来,除了默认的POSIX表达式之外,括号表达式中的范围在语言环境中没有定义。模式匹配描述指的是括号表达式的正则表达式描述,它说:

在POSIX区域设置中,范围表达式表示排序规则序列中的两个元素之间的一组排序规则元素。在其他区域设置中,范围表达式具有未指定的行为:严格一致的应用程序不应依赖于范围表达式是否有效,也不应依赖于匹配的排序规则元素集。

票数 3
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/505498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档