У меня есть скрипт bash, который я написал, скажем, 3 параметра командной строки, bib, bob и boo ... и я хочу прочитать в пользовательских параметрах переменную bash с тем же именем, которую я делаю следующим образом:
PARSED_OPTIONS=$(getopt -n $0 --long "bib:,bob:,boo:" -- "$@")
eval set -- "$PARSED_OPTIONS";
while true; do
case "$1" in
--bib)
bib=$2
shift 2;;
--bob)
bob=$2
shift 2;;
--boo)
boo=$2
shift 2 ;;
--)
shift
break;;
esac
done
Пока все отлично работает, так хорошо ...
Но теперь я хочу расширить это до списка из множества вариантов, и поэтому вместо того, чтобы выписыватьдлинное выражение case, было бы очень хорошо иметь возможность каким-то образом циклически перебирать список параметров и автоматически передавать параметры переменной, что-то вроде этих строк
opts="bib:,bob:,boo:,"
PARSED_OPTIONS=$(getopt -n $0 --long $opts -- "$@")
for arg in `echo $opts | tr , " "` ; do
eval set -- "$PARSED_OPTIONS";
while true; do
case "$1" in
--${arg})
declare $arg=$2
shift 2
;;
--)
shift
break;;
esac
done
done
Я использую оператор объявления дляполучить аргумент в динамическую переменную с тем же именем (см. Имена динамических переменных в Bash второе решение), и это решение сделать цикл по спискам через запятую Цикл через переменную оболочки через запятую но у меня тут бесконечный цикл.Я думаю, потому что 2 неиспользуемые опции позволяют, поскольку они находятся в списке PARSED_OPTIONS, но тогда они не обрезаются в цикле, так как ищется только «arg» ... Я не вижу очевидного пути обхода этого, ноЯ уверен, что есть один.