さまざまなパラメータを使用してプログラム(ループ)を実行します。

さまざまなパラメータを使用してプログラム(ループ)を実行します。

prog端末から呼び出すときに、次の整数引数を受け入れるプログラムがあります。

./prog 10

prog次の値の範囲を使用してこれを実行したいと思います10, 20, 30, ...。以下を使用する代わりに、きちんとした方法があります。

./prog 10 ; ./prog 20 ; ./prog 30 ; ....

答え1

Bash、Zsh、またはKsh93で単純なforループを使用できます。以下は、Bashバージョン4(2009)、zsh 4.3.10(2010)、およびksh93r(2006)にのみ適用されます(構文は(1995){x..y}で始まりましたが)。zsh2.6-beta4

#!/bin/bash
# since Bash v4
for i in {10..100..10}
do
     $path_of_prog/prog $i
done

この{$start..$end..$step}部分は$i開始が等しいことを意味し、に移動します$start。各段階で追加される金額です。このようにして、我々はの値を得る。$i$end$step$i10 20 30 ... 100$i

1行にすべて書くこともできます

for i in {10..100..10}; do ./prog $i; done

以前の Bash があり、seqGNU を使用できる場合は、次の行を使用します。

#!/bin/bash
#only for pre Bash v4
for i in $(seq 10 10 100)
do
   $path_of_prog/prog $i
done

または単一の裏地で

for i in $(seq 10 10 100);do ./prog $i; done

$IFS(上記では変数を変更していないとします。)

答え2

質問は次のように表示されますbash。これは他のシェルユーザー用です。

POSIX shスクリプト(移植性のため):

i=10
while [ "$i" -le 100 ]; do
  ./prog "$i"
  i=$(($i+10))
done

Bourne shスクリプト(90年代以前のシステムとの互換性のため):

echo '0[10+pd100>x]dsxx' | dc | xargs -n 1 ./prog

zsh(使用が制限されていない場合)bash

i=0; repeat 10 ./prog $((i+=10))

または

for i ({1..10}0) ./prog $i

または:

for ((i=10;i<=100;i+=10)) ./prog $i

または:

zargs -n1 {1..10}0 -- ./prog

答え3

printfにこれを行う方法はいくつかありますが、以下はいくつかの例です。

printf ' ./prog %d0\n' 1 2 3 | sh

あるいは、プログラムが実際に30回実行されることを望むかもしれません。seq影響そしてprintfこの目的に最適です。

printf ' ./prog %d\n'  `seq 1 30` | sh

あるいは、コマンドの結果に、パイプの最後で犠牲にしたくないいくつかの変数値が含まれている可能性があります。いいね:

. <<CMD /dev/fd/0
    $(printf './prog %d0\n' 1 2 3 )
CMD

数字は必要ありませんが、文字列の複数のコピーが必要な場合があり、コマンドの一部のみを繰り返す必要がありますが、他の部分は静的である可能性があります。

 . <<CMD /dev/fd/0
    $( { printf 'echo "this is part 1" >&2| ' ;\
    printf 'echo "these are parts %d" >&2 | ' `seq 1 5` ; })
CMD

printf 'this string is repeated for each of printfs args, 
    but the args are not included%.0b\n' `seq 1 5`

関連情報