実行可能なパラメータ範囲を持つ10個以上のファイルをロードする方法は? [コピー]

実行可能なパラメータ範囲を持つ10個以上のファイルをロードする方法は? [コピー]

動作するコマンドライン表現は次のとおりです。

program --files path_to_mydir/mydata_[0-9].csv

去りたかったけど、うまくいか[0-100]なかった。

program --files path_to_mydir/mydata_[0-100].csv

[0-10]また、別の質問があります。 wrtシェルスクリプトとbashスクリプトを何と呼びますか?

ありがとう

編集:似ていますが、この質問は尋ねませんでした。ls

答え1

[...]角かっこ式です。常に単一文字と一致するため、[0-100]単一0または1(POSIX ロケールで)のみ一致するため、使用できません。

zshシェルでは<0-100>数値範囲のグロービングパターンを使用できますが、次の状況では機能しませんbash

program --files path_to_mydir/mydata_<0-100>.csv

bashあなたよりできる代わりに中かっこ拡張を使用してください。

program --files path_to_mydir/mydata_{0..100}.csv

ただし、このパターンとファイル名のグロービングパターンの違いを知っておく必要があります。上記の拡張と同様に、中括弧の拡張は文字列の生成、利用可能なファイル名とファイル名ワイルドカードパターンに関係なく既存の名前と一致。これは、中括弧拡張子が存在しないプログラムファイル名を提供できることを意味します。

あなたできる0から100までの数字を持つファイルを一致させるために使用されますが、[...]各数字の長さに1つずつ3つのモードに設定する必要があります。

shopt -s nullglob

program --files \
    path_to_mydir/mydata_[0-9].csv \
    path_to_mydir/mydata_[1-9][0-9].csv \
    path_to_mydir/mydata_[1][0][0].csv

最初のもの0はに数字を含む名前と一致し、2番目はに含まれる名前と一致し、9最後はに含まれる名前と一致します。1099100

0で埋められた整数を一致させますか?

shopt -s nullglob

program --files \
    path_to_mydir/mydata_[0][0-9][0-9].csv \
    path_to_mydir/mydata_[1][0][0].csv

nullglobどの名前とも一致しないパターンが削除され、拡張されていないままになるように、このコードの両方の変形にシェルオプションを設定しました。


ユーザーfra-sanは、上記の中括弧拡張をシェルがワイルドカードパターンマッチングをトリガーするように強制することと組み合わせることができると述べました。

shopt -s nullglob
program --files path_to_mydir/[m]ydata_{0..100}.csv

[m]m文字列に(パターン一致文字)を含めると、シェルは中括弧拡張で生成された各文字列を別々のワイルドカードパターンとして扱います。を使用しているため、nullglob既存の名前と一致しないパターンはパラメータリストから削除されます。

これは101個のglobbingパターンを作成して拡張しますが、globbingを使用するこの答えの他の方法は2個または3個のパターンを使用します。

答え2

同様の正規表現演算子と同様に、glob[...]演算子は指定された文字セット(または組み合わせ要素)と一致します。

1文字だけが一致します。中に[...]は持てる

  • [abc]一致aまたはbなどの単一文字c
  • [[:digit:]]一致に対してisdigit()true を返す文字などの文字クラスです。
  • 範囲は、[a-f]および間にソートされた文字(またはソート要素)と同じです(たとえば、範囲内に属するもの以上を含めることができ、しばしば含めます)。afabcdefé
  • [[=e=]]同等クラス、[[.x.]]名前で指定された照合要素など、もう少し難しいです...

これらすべてを組み合わせることができます。たとえば、[[:blank:][:digit:]a-f123]空白、数字、aとfの間の文字、1、2、3を一致させる人は誰ですか?

一致する文字は[0-100]0 と 1、0、または 0 の範囲でソートされるため、次のいずれかです。01٠۰߀०০੦૦୦௦౦౸೦൦෦๐໐༠༳၀႐០៰᠐᥆᧐᪀᪐᭐᮰᱀᱐⁰₀↉⓪⓿〇㍘꘠꣐꤀꧐꧰꩐꯰0

関連情報