如何用重音对单词进行排序?

时间:2014-07-28 02:44:46

标签: bash sorting cygwin locale

我想知道如何按字母顺序排序西班牙语单词[带重音符号]。

单词列表摘录:

Chocó
Cundinamarca
Córdoba

1 个答案:

答案 0 :(得分:1)

Cygwin使用 GNU 实用程序,这些实用程序通常在语言环境中表现良好 - 值得注意的令人遗憾的例外是awkgawk)< SUP> ref

以下内容基于Cygwin 1.7.31-3,截至撰写本文时为止。

    默认 Cygwin 使用当前Windows用户的UI语言隐含的区域设置,并结合 UTF-8字符编码< / strong>即可。
    • 请注意,它不是基于日期/时间/数字/货币格式的设置,而更改不会产生任何影响。基于UI语言的语言环境的限制是它总是使用该语言的“home”区域;例如,如果您的UI语言是西班牙语,Cygwin将始终使用en_ES,即西班牙的语言环境。改变它的唯一方法是明确覆盖默认值 - 见下文。
  • 您可以通过多种方式覆盖,最好通过定义名为LANG 的持久 Windows 环境变量(请参阅下面;有关所有方法的概述,请参阅https://superuser.com/a/271423/139307

要在Cygwin中查看有效的语言环境,请运行locale并检查LANG变量的值。

如果没有显示es_*.utf8(其中*代表您在西班牙语世界的区域,例如,CO代表哥伦比亚,ES代表西班牙,。 ..),设置语言环境如下

  • 在Windows中,打开“开始”菜单并搜索“环境”,然后选择Edit environment variables for your account,这会打开Environment Variables对话框。
  • 使用所需的区域设置编辑或创建名为LANG的变量,例如es_CO.utf8 - UTF-8字符编码通常是最佳选择。

您从on打开的任何Cygwin bash shell都应该反映新的语言环境 - 通过运行locale进行验证并确保LC_*值与LANG值匹配,并且不会报告任何警告

此时,以下内容:

sort <<<$'Chocó\nCundinamarca\nCórdoba'

应生成(即ó将根据需要在o后直接排序:

Chocó
Córdoba
Cundinamarca

注意:语言环境en_US.utf8会产生相同的输出 - 显然,它通常直接在其基本字符后对重音字符进行排序 - 这可能是也可能不是特定的< / em>非美国语言环境确实如此。