簡體   English   中英

如何在bash中循環參數以調用函數

[英]How to loop argument in bash to call a function

如果已經問過我的問題,我想道歉,但是英語不是我的母語,所以我沒有找到答案。 我想要一個bash腳本來執行一個稱為MyProgram的程序,並且希望它以固定數量的參數運行,這些參數包含隨機數。 我想要這樣的東西:

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

我應該怎么做?

您(大多數情況下)只是使循環與實際程序調用相反。

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[@]}"

除了@chepner所說的之外,您還可以在for循環中使用for ... in 看起來像:

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可能是我發現最有用的“高級” bash的一部分,並且經常使用它。

$RANDOM % 200 - 100

與下一個perl相同

perl -E 'say int(200*rand() -100)  for (1..1000)'

例如

perl -E 'say int(200*rand() -100)  for (1..1000)' | xargs -n1 ./MyProgram

將運行如下:

./MyProgram -10
./MyProgram 13

... 1000 times ...

./MyProgram 55
./MyProgram -31

如果您需要1000個參數

./MyProgram $(perl -E 'say int(200*rand() -100)  for (1..1000)')

將產生

./MyProgram 5 -41 -81 -79 -14 ... 1000 numbers ... -63 -9 95 -9 -29

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM