2017-10-04 14 views
0

ある括弧を混合し、globingは私が私のbashスクリプトの1つに、次のループを交換したいと思いますbashの

grep -h 'my pattern' $mydir/$my_dir_prefix${1,$nb}/$myfile_prefix* 

それが失敗した...によって二重引用符を入れようとするところで、私は別の結果を得ますが、決して正しいものはありません。

類似のトピックの周りに見たすべての回答はこの問題を解決しませんでした。

+0

ブレース拡張には変数を含めることはできません。 – chepner

答えて

0

編集:第一の溶液はbash manualを見ると良好1

追加、数字のみ1-9のために動作します:

配列の発現はフォーム{x..yの[かかり.. incr]}(xとyは整数または単一文字のいずれかである )です。

...

ブレースの展開は他のどの拡張だから、変数は文字通り扱われ

の前に行われます。

ソリューション1.(数字のみ1-9のために動作します)

しかし、あなたはあなたの目的のために[]グロブを使用することができるはずです。

grep -h 'my pattern' $mydir/$my_dir_prefix[1-$nb]/$myfile_prefix* 

二重引用符について、あなたは追加することができますどこでも、しかしないグロブの周りにそれら:

grep -h 'my pattern' "$mydir/$my_dir_prefix"[1-$nb]"/$myfile_prefix"* 

ソリューション2.

あなたはbashのextglob optionを有効にすると、拡張パターンマッチングを使用することができます。

shopt -s extglob 
grep -h grep -h 'my pattern' "$mydir/$my_dir_prefix"@($(seq -s \| 1 $nb))"/$myfile_prefix"* 
+0

グレート、それはまさに私が探していたものです...私はグロブの唯一のものですべてをするのではなく、中括弧に焦点を当てた理由を知りません – leolivier

0

だけ蚊帳の外grepを引く:

grep -h 'my pattern' $(for i in $(seq 1 $nb); do find $mydir -wholename "$mydir/$my_dir_prefix$i/$myfile_prefix*"; done) 

あなたが変なふうに名前のファイル(の問題に実行されます例えば、改行やその他の空白を含む)が、元のソリューションと同じ問題を抱えていました。

関連する問題