为什么在Shell(Bash)中“字符类”优于“字符范围”?

是我

Linux命令行(书-页数47)说:

...您必须非常小心它们[字符范围],因为除非正确配置,否则它们不会产生预期的结果。现在,您应该避免使用它们,而应使用字符类。

除此之外,这本书没有任何理由。

问题- 1:那么,到底为什么要字符类(如[:alnum:][:alpha:][:digit:],等)优先于字符范围(如[a-z][A-Z][0-9],等)?

问题- 2:确实[:alpha:]代表[a-z][A-Z]上和其他语言的小写字母太同样,是否也[:digit:]包括其他语言的数字?如果它们匹配,那就是。

(我知道两个问题,但是在这种情况下,它们是相互关联的,IMO。)

阿列克修斯(Alexios)

根据bash联机帮助页的说明,LC_COLLATE环境变量会影响字符范围,完全取决于Hauke Laging的回答:

LC_COLLATE该变量确定排序路径名扩展结果时使用的排序规则顺序,并确定范围表达式,等价类以及路径名扩展和模式匹配内的整理序列的行为。

另一方面,LC_CTYPE会影响字符类:

LC_CTYPE此变量确定路径名扩展和模式匹配内的字符解释和字符类的行为。

这意味着,如果您在英语,从左到右,拉丁字母,阿拉伯数字的上下文中进行思考,则这两种情况都可能有问题。

如果您确实很合适,并且/或者正在为多语言环境编写脚本,那么最好是确保在匹配文件时知道您的语言环境变量,或者确保您在完全通用的方式。

除非您学习过语言学,否则很难预见某些情况。

但是,我不知道会更改字母顺序使用拉丁语的语言环境,因此[az]会起作用。扩展拉丁字母是整理连字和发音符号不同。但是,这是一个小实验:

mkdir /tmp/test
cd /tmp/test
export LC_CTYPE=de_DE.UTF-8
export LC_COLLATE=de_DE.UTF-8
touch Grüßen
ls G* # This says ‘Grüßen’
ls *[a-z]en # This says nothing!
ls *[a-zß]en # This says ‘Grüßen’
ls Gr[a-z]*en # This says nothing!

这很有趣:至少对于德语来说,像ü这样的变音符号和像ß这样的连字都没有被折叠成拉丁字符。(或者那样,或者我搞砸了语言环境更改!)

当然,这可能对您不利,如果您要查找以字母开头的文件名,请使用[a-z]*并将其应用于以“Ä”开头的文件。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么字符范围类[Az]匹配下划线?

来自分类Dev

什么是| (竖线字符)在shell(bash)命令中执行?

来自分类Dev

bash shell中的怪异字符

来自分类Dev

字符类Regex Firefox中的范围无效

来自分类Dev

AWK版本3.1.7中的字符类范围

来自分类Dev

为什么Java String.indexOf()优于用户定义类中实现的相同逻辑?

来自分类Dev

Bash / Shell数组中的分隔字符

来自分类Dev

集合中vector优于arraylist的缺点是什么?为什么?

来自分类Dev

为什么在sed中这个转义字符类中顺序很重要?

来自分类Dev

为什么我的字符串索引超出范围?

来自分类Dev

为什么 exec(chr(8)) 不从 shell 中删除一个字符?

来自分类Dev

shell命令从一行中删除字符范围

来自分类Dev

为什么我不能在PHP中为类变量定义连接字符串?

来自分类Dev

为什么.Net中的Exception类的ToString()方法不使用StringBuilder来构建字符串?

来自分类Dev

为什么我可以将字符串文字用作php7中的类?

来自分类Dev

为什么JS中的类/函数构造函数将字符串视为表达式?

来自分类Dev

为什么我不能在PHP中为类变量定义连接字符串?

来自分类Dev

为什么字符类中的句点不只匹配文字句点

来自分类Dev

为什么生产者中@Singleton优于@ApplicationScoped?

来自分类Dev

为什么路径中包含非法字符?

来自分类Dev

为什么sed删除示例中的字符?

来自分类Dev

为什么 td 中缺少某些字符?

来自分类Dev

为什么要在shell脚本中转义琐碎的字符?

来自分类Dev

正则表达式 - 字符类中的范围乱序

来自分类Dev

为什么这里不使用Bash在Makefiles中的字符串起作用?

来自分类Dev

为什么不计算字符串中的字符?

来自分类Dev

为什么POSIX的字符类中有双括号?

来自分类Dev

为什么否定的字符类不能按预期工作?

来自分类Dev

为什么会出现错误“字符类缺少终止”?

Related 相关文章

  1. 1

    为什么字符范围类[Az]匹配下划线?

  2. 2

    什么是| (竖线字符)在shell(bash)命令中执行?

  3. 3

    bash shell中的怪异字符

  4. 4

    字符类Regex Firefox中的范围无效

  5. 5

    AWK版本3.1.7中的字符类范围

  6. 6

    为什么Java String.indexOf()优于用户定义类中实现的相同逻辑?

  7. 7

    Bash / Shell数组中的分隔字符

  8. 8

    集合中vector优于arraylist的缺点是什么?为什么?

  9. 9

    为什么在sed中这个转义字符类中顺序很重要?

  10. 10

    为什么我的字符串索引超出范围?

  11. 11

    为什么 exec(chr(8)) 不从 shell 中删除一个字符?

  12. 12

    shell命令从一行中删除字符范围

  13. 13

    为什么我不能在PHP中为类变量定义连接字符串?

  14. 14

    为什么.Net中的Exception类的ToString()方法不使用StringBuilder来构建字符串?

  15. 15

    为什么我可以将字符串文字用作php7中的类?

  16. 16

    为什么JS中的类/函数构造函数将字符串视为表达式?

  17. 17

    为什么我不能在PHP中为类变量定义连接字符串?

  18. 18

    为什么字符类中的句点不只匹配文字句点

  19. 19

    为什么生产者中@Singleton优于@ApplicationScoped?

  20. 20

    为什么路径中包含非法字符?

  21. 21

    为什么sed删除示例中的字符?

  22. 22

    为什么 td 中缺少某些字符?

  23. 23

    为什么要在shell脚本中转义琐碎的字符?

  24. 24

    正则表达式 - 字符类中的范围乱序

  25. 25

    为什么这里不使用Bash在Makefiles中的字符串起作用?

  26. 26

    为什么不计算字符串中的字符?

  27. 27

    为什么POSIX的字符类中有双括号?

  28. 28

    为什么否定的字符类不能按预期工作?

  29. 29

    为什么会出现错误“字符类缺少终止”?

热门标签

归档