2016-03-30 9 views
0

私が働くbashのブレース機能変数と一緒に使用するとbashブレース機能が失敗しますか?

ls *{10..20}.txt 

を、使用しようとしました

私はの.txtパターン* {} num1..num2と、現在のディレクトリ内のファイルを一覧表示するのbashを使用しようとしています。しかし、変数num1とnum2を最初に設定してから、

num1=10 
num2=20 
ls a{${num1}..${num2}}.txt 

を実際には使用できません。私はbash -xを使ってデバッグしましたが、bashが自動的に一重引用符を文字列a{${num1}..${num2}}.txtに追加することが判明しました。これは非常に奇妙です。

解決方法はありますか?

ありがとうございました。

+2

を評価する必要があります。 'eval'の使用は本当に必要ではありません(避けられればいいアイデアです)。すべての引数を指定して1つのコマンドを実行する必要がある場合は、ループ内のエントリを配列に累積することができます。 –

+0

次のループを意味しますか? 'all =; {10..20}の私のために。 do all = "$ all $(ls * $ i.nc)";完了しました。 echo $ all' – xin

+1

ループはさまざまな理由で間違っています.'all =(); {10..20}の私のために。すべての+ =(* "$ i.nc");完了しました。 echo "$ {all [@]}" ' – chepner

答えて

0
$ n=3; echo {"$n"..5} 
{3..5} 

は、あなたが可能で、すべての場合は受け入れ答えを無視し、結果

$ n=3; eval echo {"$n"..5} 
3 4 5 
+0

必須 "eval is evil"コメント。 – karakfa

+0

多くの人が「eval is evil」と言っています。私は通常それを使用しないので、私は理由を知らない。しかし、少なくともこの問題の解決策を提供します:D – xin

+0

おそらくこの用途ではありませんが、おそらくそれを悪用する可能性があります。 – karakfa

関連する問題