この質問が何らかの形で要求されたと確信しています。良い検索結果が見つかりませんでした。
私は何かを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'
答え2
yes _do | head -n 10 | 3<&0 0>&- \
<<\INIT sh -s -- my args
alias _do='echo these are "$@."'
exec <&3 3>&-
#END
INIT
シェルを非常に簡単に強制的に供給することもできます。xargs
それも大丈夫です。
出力:
these are my args.
these are my args.
these are my args.
these are my args.
these are my args.
these are my args.
these are my args.
these are my args.
these are my args.
these are my args.