ls
次のファイルが一見違う順序でリストされているのはなぜですか?
デフォルトでは、ls
ファイルは現在のロケールのアルファベット順にリストされません。これがデフォルトのようです。
$ ls
a_1 a_10 a_11 a_12
$ ls
a_10-18 a_11-18 a_1-18 a_12-18
私はとをalias ls='ls --color=auto'
持っていますLC_COLLATE="en_US.UTF-8"
。
ベストアンサー1
ロケールは実際には複雑です。目標は、技術的な知識を持たないユーザーに「正常な感じ」を与えることです。 (技術者はLANG=C
これを使って暖かくて暖かい感じを得ることができます。)技術的な定義は次のとおりです。Unicode標準文書、ここで何かを蒸留しようとしています。矯正を受けて嬉しいです。
興味深く読んだと思います。ロケールデータ自体ではなく、データを扱うユーザーの属性です。例の文字列で使用されている文字は同じですが、技術文書では、ドイツのユーザーのソート順がスウェーデンのユーザーのソート順と異なることを明確に説明しています。
en_GBおよびen_USロケールは、この-
文字を無視するように設定されています。これらのロケールの昇順ソート規則は非常に簡単です。
- 大文字と小文字を区別しない
- 最初に2つの文字列が同じですが、1つが長い場合は2番目の文字列になります。だから
xyzA
いつもそれ以来xyz
-
特定の句読点(この場合を含む)は、他の句読点と比較しない限り無視されます。- 数字は文字の前にソートされます。
- 数値ソート
0
..9
- 文字ソート
[Aa]
..[Zz]
(en_GBとen_USには実際にはアクセントはありません) - 特定の文字に対して、小文字は大文字の前に来ます(したがって、
one
前に来ますが、One
両方とも前に来ますtwo
)。 - 句読点はソートされています(ただし、この回答の例とは関係ありません)。
関連データセットに次の規則を適用します。
a_1 a_10 a_11 a_12
これはと同じであり、a1
a10
a11
a12
ルール#2を考慮すると前にする必要がa1
あります。他のすべての項目には同じ数の英数字があるため、一貫して比較できます。これは私たちに。a10
a11
a1
a_1
a_10
a_11
a_12
a_10-18 a_11-18 a_1-18 a_12-18
#3も適用されることを除いて、同じ規則が適用されます(句読点は無視されます)。つまりa_1018
a_1118
a_118
a_1218
、この値をとして扱うことができ、ルール#2と#4に従って順序を取得しますa_10-18
a_11-18
a_1-18
a_12-18
。
コメントの最後の例をご覧ください。
a_10 a_10- a_100 a_101 a_10-18 a_102
ルール#3を適用してから、ルール#2、#4を適用します。したがって-
、与えられた文字を削除(無視)a_10
a_10
a_100
a_101
a_1018
a_102
し、残りの部分を共通のサブストリングプレフィックスでソートしてから、文字の順序でソートします。
a_10
(長さのために得ることができるのか、それともそれだけで終わるから得ることができるかはわかりません。後者を提案したいのですが、誰かがこれを確認できることを願っています。)a_10-