条件付き演算子を使用するときのソート順序は何ですか?

条件付き演算子を使用するときのソート順序は何ですか?

私はファイル名のリストを処理し(図のようにglob拡張を使用してfor f in *)、そのリストのサブセットをファイルに出力するbashスクリプトを作成しました。次に、ファイルの内容を配列として読み取って文字列を比較するために、明確な<AND演算子を使用して特定の>ファイル名の単純なバイナリ検索を実行しました。

このスクリプトがLinux、MacOS、MinGWなどのさまざまな環境で動作することを望んでいることを考慮すると(移植性の低い環境を使用しますが[[stat、私の質問は次のとおりです。

  1. ファイルの内容をソートする必要があります(sortbashコードを使用または追加する)、またはglob拡張子はすべての環境で常にソートされますか?
  2. 条件付き演算子はsort拡張(またはそれ以降)と同じ「順序」を使用しますか?

    (どのような状況で?)後に拡張または返されますが、条件付きsort演算子を使用することは以前に発生しますか?この問題を解決するには、どのオプションを使用する必要がありますか?file10.txtfile2.txtfile10.txtfile2.txtsort

  3. 私のファイル名の一部がUnicodeの場合、考慮する必要がありますか?

  4. 特定のバージョンのbashを使用するのに問題がありますか?
  5. LC_COLLATE上記に影響しますか?

明らかに、バイナリ検索が期待どおりに機能するには、演算子のソート「方法」と一致するファイルの内容が必要です。

ベストアンサー1

はい、グローバル拡張は常にソートされます。
bashから(からLESS=+/'^ *Pathname Expansion' man bash

パス名の拡張...単語はパターンとして扱われます。パターンに一致するファイル名のアルファベット順のリストに置き換えられます。

これもPOSIX globで指定:

...パス名は、LC_COLLATEカテゴリの現在の設定で定義されているソート順でソートされます。

注1GLOB_NOSORTフラグが設定されていない場合。この場合、順序は指定されません。

ノート2:ソート順はアルファベット順(数字ではない)で、2の前に10が付きます。


答え:

  1. ファイルの内容を並べ替える必要があります(ソートまたは追加のbashコードを使用)...

Globingはファイルの内容とは無関係で、ファイル名のみが関連付けられています。 「ファイルの内容」を並べ替える必要がある場合は、はい。かなり多くのコードを使用する
必要があります。sortbash

  1. ...または、すべての環境でグローバル拡張が常にソートされていますか?

無効にしない限り、Globing結果はGLOB_NOSORT環境のソート順(変数)で定義されている順序でソートされます。LC_COLLATE

同じソート順序を持つには、同じ有効な照合順序が必要です。どちらも変数を設定LC_COLLATEし、locale同じ照合の詳細を含む説明を持ちます。

  1. 条件付き演算子は拡張(またはソート)と同じ「ソート」を使用しますか?

はい。どちらも同じ方法で影響を受けますLC_COLLATE

  1. 拡張またはソートすると、file2.txtの後にfile10.txtが返されますが(どのような場合ですか?)条件付き演算子file10.txtを使用すると、file2.txtの前に返されますか?この問題を解決するには、どのソートオプションを使用する必要がありますか?

10beforeの結果2は「事前順」であり、これはbashマニュアルの説明で「アルファベット順」と呼ぶのと同じです。したがって、bash(またはPOSIXシェル)を使用してソートする場合、これはすべての場合に得られる順序です。何の問題もないため、修正できません(テキストの場合)。

sortただし、(シェルの外側の外部ツール)を使用することを選択した場合は、numericソート(-nオプション)を要求すると2入力されます10。あるいは、テキストから数値を抽出して-lt -gt整数比較を実行するために使用することもできます。シェル(整数算術記号)。

私のファイル名の一部がUnicodeの場合、考慮する必要がありますか?

最大:ソート順序は固定されていません。

時間とUNICODEのバージョンによって変わります。

おなじみの言語で素晴らしい結果を得ることもできます。たとえば、

「aa」はデンマーク語で「å」と一致します。

簡単に言うと「驚くべき準備をしなさい」です。

特定のバージョンのbashを使用するのに問題がありますか?

さて、bash 2.0以降のバージョンを使用する必要があります

respect LC_COLLATE  2.0 

LC_COLLATEは上記の項目に影響しますか?

可変的なLC_COLLATE影響みんな上記の。

おすすめ記事