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