検索結果を変数に設定するには?

検索結果を変数に設定するには?

find . | grep "B02_10m.tif$"

端末でこのコードを実行すると、B02_10m.tifで終わるすべてのファイルを取得できます。ただし、一部の処理では、acファイルへの入力としてこのリストが必要です。入力は、スクリプトパラメータの一部として渡されるLinux変数でなければなりません。

./avg outAVG $files ここで、 $files は最初のフラグメントの結果を含む変数です。

それは可能ですか?私は努力しました:

files = $(find . | grep "B02_10m.tif$")

Command 'files' not found, did you mean:

  command 'file2' from deb file-kanji
  command 'file' from deb file

Try: sudo apt install <deb name>

しかし、それはうまくいきませんでした。

ベストアンサー1

bashシェルを使用しているとします。

shopt -s globstar nullglob dotglob

./avg outAVG ./**/*B02_10m.tif

avgこれは現在のディレクトリまたはその下にあるファイル名でプログラムを呼び出します。まず、グローブモードをB02_10m.tif有効にしてこれを行います。このパターンは「再帰的に」サブディレクトリと一致します。 TIFFファイルがある場合**shopt -s globstar現在の**ディレクトリにはパターンのこの部分は必要ありません。

他の2つのシェルオプションは、ワイルドカードパターンが隠された名前と一致することを確認し、一致するものがない場合find

zshシェルを使用している場合は、次のものを使用できます。

./avg outAVG ./**/*B02_10m.tif(.DN)

これは同じことをします。同様に、TIFFイメージが保存されているディレクトリを知っていれば、**モードビットは必要なく、代わりにそのディレクトリに正しいパスを挿入できます。

同様のシェルのファイルshがディレクトリにある場合は、$dir次のものを使用できます。

./avg outAVG "$dir"/*B02_10m.tif

これは明らかにサブディレクトリの再帰検索を実行しません$dir


あなたの方法は2つの理由で動作しません。

  1. 変数の割り当てに構文エラーがありますfiles=課題には周囲の空白があってはなりません。

  2. 構文エラーを修正するために、複数の個別のファイル名を単一の文字列に結合しました。これにより、ファイル名に通常シェルワイルドカードとして使用されるスペースと文字が含まれる可能性があるという事実は無視されます。後で引用符を使用しないと、$filesシェルは文字列を空白文字(デフォルト)から複数の単語に分割し、シェルのワイルドカードパターンのように見えるすべての単語を展開します。常に非常に単純なファイル名を使用しないと、コードが誤動作します。

これらの問題の詳細については、次を参照してください。

おすすめ記事