./MyProgram for(i = 0; i < 1000; i++) $(($RANDOM%200-100))
我应该怎么做?
答案 0 :(得分:2)
你(大部分)只是把循环和实际的程序调用反转。
for ((i=0; i < 1000; i++)); do
./MyProgram $((RANDOM%200 - 100))
done
但是,如果您确实希望将1000个不同的参数传递给单个调用,则必须先构建一个列表。
args=()
for ((i=0; i < 1000; i++)); do
args+=( $((RANDOM%200 - 100)) )
done
./MyProgram "${args[@]}"
答案 1 :(得分:0)
除了@chepner所说的,你还可以使用for ... in
样式的for循环。这看起来像:
for a in one two three; do
echo "${a}"
done
会产生结果:
one
two
three
换句话说,in
部分之后用空格分隔的单词列表循环,循环的每次迭代在变量a
中都有不同的单词。
要调用您的程序1000次(或者只是修改以生成参数列表,以便在@chepner的答案中运行一次),您可以这样做:
for a in $(seq 1 1000); do
./MyProgram $((RANDOM%200 - 100))
done
其中seq
命令的输出提供要循环的值列表。虽然传统的for循环可能对许多程序员来说更加明显,但我喜欢for ... in
,因为它可以在很多情况下应用。粗略而且毫无意义的ls
,例如:
for a in *; do
echo "${a}"
done
for ... in
可能是&#34; advanced&#34;我发现最有用的bash,并经常使用它。
答案 2 :(得分:0)
在
$RANDOM % 200 - 100
与下一个perl相同
perl -E 'say int(200*rand() -100) for (1..1000)'
e.g。在
perl -E 'say int(200*rand() -100) for (1..1000)' | xargs -n1 ./MyProgram
将运行如下:
./MyProgram -10
./MyProgram 13
... 1000 times ...
./MyProgram 55
./MyProgram -31
如果你需要1000 args
./MyProgram $(perl -E 'say int(200*rand() -100) for (1..1000)')
将产生
./MyProgram 5 -41 -81 -79 -14 ... 1000 numbers ... -63 -9 95 -9 -29