[英]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.