2017-07-04 5 views
0

シェルの変数に割り当てられたコマンドについての回答を探していますが、成功していません。私のスクリプトは、ファイル4444444.xmlを持つ2015mayという名前のフォルダを探します。コマンドfind /path/zipfolders -name "*${array[$((i+1))]}*" -exec grep -l "${array[$i]}" {} +は、これらのパラメータ["2015may","44444444"]:path/filename_2015may.zipを使用して次の出力を表示します。問題は、このコマンドがにアサートするときに''を返すことです。私は$commandにそれをassingningときに私は構文ミスを持っていると思う。私はこの問題を解決するためにあなたの助けを感謝します。ファイルパスを含む変数にコマンドを割り当てます

スクリプト

command=$(find /path/zipfolders -name "*${array[$((i+1))]}*" -exec grep -l "${array[$i]}" {} +) 
echo "$command" 

実際の出力

find /path/zipfolders -name "*${array[$((i+1))]}*" -exec grep -l "${array[$i]}" {} + 
++ find /path/zipfolders -name '*2015may*' -exec grep -l 44444444 '{}' + 
+ command= 
+ echo '' 

所望の出力

path/filename_2015may.zip

+0

'zip'ファイル内で' zgrep'を検索する必要はありません。 – anubhava

答えて

0

コマンド出力をシェル変数に割り当てるには、コマンドをバッククォート( ``)で囲みます。あなたのコマンドは次のようになります:

command=`(find /path/zipfolders -name "*${array[$((i+1))]}*" -exec grep -l "${array[$i]}" {} +)` 
    echo $command 
+3

'$()'(質問で使用されています)はバッククックよりも一般的に好まれます。なぜなら、読みやすく、バッククニック内でエスケープする(そして入れ子にする)ことがあるからです。 [BashFAQ#82](http://mywiki.wooledge.org/BashFAQ/082)を参照してください。 –

関連する問題