ファイル名をソートするとき、などのls
文字を無視します-,_
。ソートにもこれらの文字を使用することを期待していました。
例:
touch a1 a2 a-1 a-2 a_1 a_2 a.1 a.2 a,1 a,2
ここでこれらのファイルを表示しますls -1
:
a1
a_1
a-1
a,1
a.1
a2
a_2
a-2
a,2
a.2
私が期待したのは次のようなものでした:
a1
a2
a,1
a,2
a.1
a.2
a_1
a_2
a-1
a-2
つまり、ソート時に英数字以外の文字が考慮されることを期待していました。
誰もこの行動を説明できますか?この動作は標準で義務付けられていますか?または、これはエンコーディングがUTF-8であるためですか?
更新:これはUTF-8ソートに関連しているようです:
$ LC_COLLATE=C ls -1
a,1
a,2
a-1
a-2
a.1
a.2
a1
a2
a_1
a_2
問題は、ASCIIとUTF-8が同一であることではなく、UTF-8が独自の照合(ソート)ルールを持っていることです。
—
ダニエルクルマン
はい、
—
当てはまり
[_-,.]
グループ化され、何らかの形で半無視されているのは事実です。単に、とだけに照合変化するので、私はそのような照合が定義されている正確にどのようにかどこかわからないが、それは照合の問題でなければなりませんCを(経由するLC_COLLATE=C ls -l
)と仮定すると(あなたが期待されるソート順を与えるのに十分ですLC_ALL
オーバーライドしないLC_COLLATE
)。これは、Unicode Basic Multilingual Planeの全範囲の文字に
動作が気に入らない場合は、エイリアスを作成して〜/ .profileに入れることができます
—
。alias
LC_COLLATE=C ls
?