如何在bash中循环参数来调用函数

时间:2014-09-28 22:36:06

标签: bash function arguments

如果我的问题已被提出,我想道歉,但英语不是我的母语,我也找不到答案。我想要一个执行程序的bash脚本,我将调用MyProgram,我希望它以固定数量的参数运行,这些参数包含随机数。我想要这样的事情:

./MyProgram for(i = 0; i < 1000; i++) $(($RANDOM%200-100))

我应该怎么做?

3 个答案:

答案 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