bash, используя два аргумента внутри case, увеличивая переменную после каждого цикла в POSIX

#bash

#bash

Вопрос:

У меня есть код ниже. Я хочу увеличивать iter после каждого цикла for на 1. Если цикл найдет «-a», я бы хотел, чтобы case сделал: установите swticha в true и установите posa в фактическое значение iter. Возможно ли это в любом случае? Спасибо!

 iter=0
for var in "$@"
do
  filtry $var "$((iter))"
  $iter=$(iter 1)
done

filtry()
{
    case $1 in
      -a)
        switcha=true
        posa=$2;;
      -b) switchb=true;;
      -ip) switchip=true;;
      -uri) switchuri=true;;
    esac
}
  

Комментарии:

1. Я имею в виду, я хотел бы получить, является ли первый аргумент — posa значением 1, но если это третий аргумент, posa должен быть установлен на 3.

2.В $iter=$(iter 1) вы не можете использовать $ в левой части присваивания ( $ возвращает значение переменной, поэтому не используйте его при установке значения). Кроме того, $( ) выполняет ее содержимое как команду; для выполнения математики используйте $(( )) вместо этого. Наконец, вы должны определить, filtry прежде чем использовать его.

3. Кстати, похоже, вы пытаетесь изобрести что-то новое getopts — я бы посмотрел на это вместо этого.

4. Да, я пытаюсь заново изобрести getopts, но мне нужно использовать более одного идентификатора chr.