是否有 LC_COLLATE 在破折号之前对点进行排序?

是否有 LC_COLLATE 在破折号之前对点进行排序?

在我检查过的语言环境中Cen_US.UTF-8点(“.”)在破折号(“-”)之后排序。当我cd和完整目录说“som”时,那么some-dir.git之前就完成了some.git。我还列出了我的项目的主题,并且文件zdharma-256.theme之前已被通配zdharma.theme。对我来说,一个自然的顺序是首先完成较短的目录。

LC_COLLATE我可以用它来解决这个问题吗?

也许这不是一个整理问题,而是在第一次排序时忽略扩展的问题?是否有Zsh我可以使用的代码(通配标记等)?

答案1

不,不存在这样的校对,至少没有标准的校对。

您可以通过以下方法自行检查:

  1. 首先准备一个文件(行Aaaa此处仅用于测试目的)

    cat >test <<\eof
    Aa
    aa
    some.git
    some-dir.git
    eof
    
  2. sort使用系统上可用的所有可能的排序规则运行命令:

    for loc in $(locale -a); do
        echo "____${loc}____";
        LC_COLLATE="$loc" sort test;
    done > test_sorted
    
  3. 现在test_sorted用您最喜欢的编辑器打开,并看到不同的语言环境排序Aaaa不同,但它们都具有some-dir.gitbefore some.git.换句话说

    pcregrep -M 'some.git\nsome' test_sorted
    

    什么也没给出。

之所以-出现在前面,.源于ascii 和unicode 表(参见参考资料man ascii)。连字符(技术上称为连字符减号)的十进制代码为 45 (U+002D),而点的十进制代码为 46 (U+002E)。

如果您足够绝望,您可以编写自己的语言环境,改变这种行为。最简单的方法是修改当前文件之一,您可以在/usr/share/i18n/locales/.

相关内容