CLIおよびforループの変数置換

CLIおよびforループの変数置換

この質問が何らかの形で要求されたと確信しています。良い検索結果が見つかりませんでした。

私は何かをN回できるスクリプトが欲しいので、N回実行したいコマンドを変数としてスクリプトに渡すことができます。通常、コマンドはイテレータ値を使用して何かを変更できます。たとえば、私は次のことをしたいと思います。

~> doNtimes.sh 10 0 "ls *$(($2 + $i ))*.gnu | wc -l;"

doNtime.shは次のようになります。

  for ((i=0; i < $1; ++i)); do 
       echo "iterator=$i"; 
       $3
  done

もちろん、現在二重引用符を使用することは私に失敗しています。一重引用符を使用してみましたが、それも機能しません(他の理由がありますが)。空白の変数があり、スクリプトで評価する変数が含まれているため、正しい構文を見つけることは不可能です...どのようなアイデアがありますか?

ベストアンサー1

以下を評価する必要があります。

for ((i=0; i < $1; ++i)); do 
    echo "iterator=$i"; 
    # for debugging
    echo eval "$3"
    eval "$3"
done

もちろん、コマンド文字列の正しい引用に注意する必要があります。あなたの例は、スクリプトが実行される前にIEでls *$(($2 + $i ))*.gnu | wc -l変数参照が解決されるという点で危険です。""一重引用符が必要です。

doNtimes.sh 10 0 'ls *$(($2 + $i ))*.gnu | wc -l'

おすすめ記事