2010-10-13 31 views
1

我有一個程序,./a,我在shell中循環運行。Linux shell將變量值傳遞給主程序

for((i=1 ; i<=30; i++)); do 
./a arg1 5+i &//arg2 that I need to pass in which is the addition with the loop variables 
done 

我怎麼能在這是除了與循環變量的ARG2通過呢?

另外,我有另一個程序是./b,我需要運行一次,並採取所有5 +我的論點。我怎麼能沒有硬編碼呢。

./b arg1 6\ 
     7\ 
     8\ 
     9\..... 

謝謝。

回答

2

加入與執行相同的(()),你已經在使用,而串聯則簡單地用 「」 來完成:

for((i=1 ; i<=30; i++)); do 
let j=$((5+i)) 
list="$list $j" 
./a arg1 $j 
done 

./b $list 
+0

+1這是正確的答案。備用語法:'((j = 5 + i))' – 2010-10-13 14:23:44

1

這應該工作:

(for((i=5 ; i<=30; i++)); do ./a $((5+i)); echo $((5+i)); done) | xargs ./b 
0

關於你的第二部分我會這樣做

./b arg1 $(seq 6 35) 

或者如果你真的需要在循環內加入

declare -a list 
for n in $(seq 1 30) ; do 
    list=("${list[@]}" $((5+n))) 
done 
./b arg1 ${list[@]} 
1

在當前的bash版本中,可以使用{a..b}範圍表示法。例如。

for i in {1..30}; do 
    ./a arg1 $i 
done 

./b arg1 {6..35}