Оболочка Linux передает значения переменных в основную программу - PullRequest
1 голос
/ 13 октября 2010

У меня есть программа, ./a, которую я запускаю в цикле в оболочке.

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 + i аргументов.Как я могу сделать это без жесткого кодирования.

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

Спасибо.

Ответы [ 4 ]

2 голосов
/ 13 октября 2010

Добавление выполняется с тем же (()), который вы уже используете, в то время как объединение выполняется просто с помощью "":

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

./b $list
1 голос
/ 13 октября 2010

В текущих версиях bash вы можете использовать обозначение диапазона {a..b}.Например,

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

./b arg1 {6..35}
1 голос
/ 13 октября 2010

Это должно работать:

( for((i=5 ; i<=30; i++)); do ./a $((5+i)); echo $((5+i)); done ) | xargs ./b
0 голосов
/ 13 октября 2010

Для вашей второй части я бы сделал это следующим образом

./b arg1 $(seq 6 35)

Или, если вам действительно требуется сложение в цикле

declare -a list
for n in $(seq 1 30) ; do
    list=("${list[@]}" $((5+n)))
done
./b arg1 ${list[@]}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...