psp*_*int 8 zsh sort wildcards locale
在我检查过的语言环境中C
,en_US.UTF-8
点 (".") 排在破折号 ("-") 之后。当我cd
和完整目录说“som”时,则some-dir.git
在some.git
. 我还列出了我的项目的主题,并且文件zdharma-256.theme
在zdharma.theme
. 对我来说,自然的顺序是首先完成较短的目录。
有没有LC_COLLATE
我可以用来解决这个问题的?
也许这不是整理问题,而是在排序的第一遍忽略扩展的问题?是否有Zsh
我可以使用的代码(通配标志等)?
不,没有这样的校对,至少不是标准的校对。
以下是您自己检查的方法:
首先准备一个文件(行Aa
和aa
这里只是为了测试目的)
cat >test <<\eof
Aa
aa
some.git
some-dir.git
eof
Run Code Online (Sandbox Code Playgroud)sort
使用系统上所有可用的排序规则运行命令:
for loc in $(locale -a); do
echo "____${loc}____";
LC_COLLATE="$loc" sort test;
done > test_sorted
Run Code Online (Sandbox Code Playgroud)现在打开test_sorted
你喜欢的编辑器,看到不同的区域来分类Aa
和aa
不同,但个个都some-dir.git
之前some.git
。换句话说
pcregrep -M 'some.git\nsome' test_sorted
Run Code Online (Sandbox Code Playgroud)
什么都不给。
之所以-
出现在 before.
源于 ascii 和 unicode 表(请参阅 参考资料man ascii
)。连字符(技术上称为连字符减号)的十进制代码为 45 (U+002D),而点是 46 (U+002E)。
如果你足够绝望,你可以编写自己的语言环境,改变这种行为。最简单的方法是修改当前文件之一,您可以在/usr/share/i18n/locales/
.