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
some.git
pcregrep -M 'some.git\nsome' test_sorted
何も与えられません。
-
前に表示される理由は、.
ASCIIテーブルとUnicodeテーブルのためです(参考文献を参照man ascii
)。ハイフンの10進数コード(技術的にハイフン減算と呼ばれる)は45(U + 002D)、点の10進数コードは46(U + 002E)です。
気になる場合は、この動作を変更するロケールを直接作成できます。最も簡単な方法は、現在のファイルの1つを変更することです/usr/share/i18n/locales/
。これはで行うことができます。