Зацикливаться на массиве аргументов, не зная, сколько аргументов в сценарии оболочки? - PullRequest
1 голос
/ 01 июля 2010

Я хочу передать множество аргументов скрипту оболочки, который я не знаю, сколько аргументов у них будет, и я хочу обработать их.Я сделал следующий код:

int=$1
src=$2

r=$3
string=$4

duration=$5

./start.sh $int $r $src "$string"
sleep $duration

shift; shift; shift; shift; shift

while [ $# -gt 2 ]
do
  r=$1
  string=$2
  duration=$3
  ./change.sh $int $r "$string"
  sleep $duration
  shift; shift; shift
done

Это работает, но только один раз, теперь я хочу, чтобы этот скрипт работал постоянно, я имею в виду использование while 1, но это не будет работать, потому чтосписок аргументов пуст в конце этого кода!

Есть ли способ сделать что-то вроде следующего «псевдокода» в скриптах оболочки:другой массив, чтобы я мог использовать его позже, как я хочу.Я имею в виду, могу ли я скопировать $* или $@ или arg в другой массив?

Любая помощь высоко ценится.

Ответы [ 3 ]

3 голосов
/ 01 июля 2010

Количество аргументов хранится в параметре #, доступ к которому можно получить с помощью $#.

Простой цикл для всех аргументов можно записать следующим образом:

for arg
do
    # do something with the argument "arg"
done
0 голосов
/ 01 июля 2010
declare -a array_list
index=0
for arg
do
   array_list[$index]=$arg
   echo ${array_list[$index]} #just to make sure it is copied :)
   ((index++))
done

теперь я использую array_list , чтобы делать со списком аргументов все, что я хочу. Спасибо

0 голосов
/ 01 июля 2010

Вы можете использовать $# для получения количества аргументов, переданных скрипту, или $@ для получения всего списка аргументов.

...