「ls」が次のファイルを見かけ上別の順序でリストするのはなぜですか?

「ls」が次のファイルを見かけ上別の順序でリストするのはなぜですか?

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ロケールは、この-文字を無視するように設定されています。これらのロケールの昇順ソート規則は非常に簡単です。

  1. 大文字と小文字を区別しない
  2. 最初に2つの文字列が同じですが、1つが長い場合は2番目の文字列になります。だからxyzAいつもそれ以来xyz
  3. -特定の句読点(この場合を含む)は、他の句読点と比較しない限り無視されます。
  4. 数字は文字の前にソートされます。
  5. 数値ソート0..9
  6. 文字ソート[Aa].. [Zz](en_GBとen_USには実際にはアクセントはありません)
  7. 特定の文字に対して、小文字は大文字の前に来ます(したがって、one前に来ますが、One両方とも前に来ますtwo)。
  8. 句読点はソートされています(ただし、この回答の例とは関係ありません)。

関連データセットに次の規則を適用します。

a_1  a_10  a_11  a_12

これはと同じであり、a1 a10 a11 a12ルール#2を考慮すると前にする必要がa1あります。他のすべての項目には同じ数の英数字があるため、一貫して比較できます。これは私たちに。a10a11a1a_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-

おすすめ記事