2017-02-05 9 views
1

ファイルパターンのリストを含む環境変数に対して反復処理を行う問題があります。'*'を含むBash forループの文字列

例: "FILEPATTERN = * XML * .logに"

コード:

local log_file_pattern=(${FILEPATTERN}) 
for ((i=0; i < ${#log_file_pattern}; i++)) 
do 
    pattern="${log_file_pattern[$i]}" 
    ... some more code ... 
done 

私は常に取得:。

  • パターン= * xmlの最初の反復に
  • パターン=第2の繰り返しでのアナコンダ - ポストログ

ループが* .logを解釈しないようにするにはどうすればよいですか?

+1

どのように 'FILEPATTERN'を設定していますか? – codeforester

+0

何をしようとしていますか?私たちに完全な絵を与えてください、あなたはデザインの問題を抱えているかもしれません。結局、これらのグロブで何をやろうとしていますか? あなたのコマンドは、$ {FILEPATTERN}の 'for f 'と等価であることに注意してください。 doパターン= $ f; ...コードをもっと... ...;完了しました。本当に本当にグロブをオフにしたい場合は、関数の先頭に '-f'をセットしてから、' set + f'でグロブをやり直してください。 –

答えて

1

私は信じてFILEPATTERN*.xml *.log

問題は、この行にあるように設定されます。

local log_file_pattern=(${FILEPATTERN}) 

あなたは${FILEPATTERN}の周りに二重引用符を使用していないので、シェルグロブは有効です。ディレクトリに*.xmlと一致するファイルがないようですが、*.logはいくつかのファイル名に展開されます。そのため、配列要素0は*.xmlに設定され、要素1はanaconda-post.logに設定されます。

あなたがherestringで、あなたの配列を読み込むためにreadコマンドを使用して、あなたの問題を解決することができます:

グロブせずに、あなたの配列の要素1の要素0から *.xml*.logをロード
local log_file_pattern 
read -r -a log_file_pattern <<< "$FILEPATTERN" 

+1

ありがとう、完璧に動作します! – blacklabelops

関連する問題