moo*_*t39 34 linux command-line ls sorting coreutils
当我试图对 ls 命令进行逆向工程时,我发现了一个有趣的行为。当我做3个文件,foo.png,foopa.png,和fooqa.png,LS排序他们为foopa.png,foo.png和fooqa.png。我也尝试过使用 .gif 扩展名,似乎是在 p 和 q 被扩展名的第一个字母和字母表中的下一个字母替换时发生的;所以在 . g如果是 g 和 h。( fooga.gif, 那么foo.gif, 那么fooha.gif)
为什么它以这种方式对输出进行排序?
xen*_*oid 53
这取决于您的语言环境的整理顺序:
>LANG=en_IE.UTF-8 ls -1 foo*
foopa.png
foo.png
fooqa.png
>LANG=C ls -1 foo*
foo.png
foopa.png
fooqa.png
Run Code Online (Sandbox Code Playgroud)
您还可以使用 LC_COLLATE 变量代替 LANG,并使用 POSIX 语言环境代替 C 语言环境。
C 校对顺序是纯字母顺序(ASCII 顺序)。其他整理顺序(例如英语)可能会将空格和特殊字符(例如点)视为分隔符,并且单独处理“单词”或仅忽略这些分隔符(此处似乎就是这种情况)。
请注意,非 UTF-8 语言环境也使用字母 ASCII 进行排序:
>LANG=en_IE ls -1 foo*
foo.png
foopa.png
fooqa.png
Run Code Online (Sandbox Code Playgroud)
经过一些进一步的挖掘,似乎忽略标点符号是 Unicode 感知区域设置的一个共同特征,例如*.UTF-8那些。
| 归档时间: |
|
| 查看次数: |
5030 次 |
| 最近记录: |