Я использую getopts
для анализа аргументов в сценарии bash
. Я хочу сделать две вещи:Может ли getopts разобрать подмножество аргументов сценария bash и оставить остальное неповрежденным?
- удалить обработанные варианты из
"[email protected]"
- оставить необработанными варианты в
"[email protected]"
считают командной строки
$ foo -a val_a -b val_b -c -d -e -f val_f positional_l positional_2 ...
Где foo
использует getopts
для разбора параметры, определенные в optstring из 'b:c'
и после этого нужно оставить "[email protected]"
в
`-a val_a -d -e -f val_f positional_l positional_2 ...`
мне нужно сделать две вещи:
- разбора набор опций, которые могут быть предоставлены
- оставить все другие opptions нетронутыми
Причина этого в том, что foo
должен использовать параметры, которые он распознает, для определения другого сценария bar
, которому он должен передать оставшиеся "@"
.
Обычно getopts
останавливается, когда встречается с непризнанной опцией, но мне нужно его продолжать (до любого --
). Мне нужно это, чтобы обработать и удалить параметры, которые он распознает, и оставить в покое те, которые этого не делают.
Я попытался обойти мою проблему с помощью --
между foo
вариантами и bar
вариантами, но getopts
кажется, сруб, если текст после --
начинается с -
(я пытался, но не смог избежать дефиса).
Во всяком случае я предпочел бы не должен использовать --
потому что я хочу существование bar
быть эффективно прозрачно для вызывающей foo
, и я хотел бы вызывающий из foo
, чтобы иметь возможность представить варианты в любом порядке ,
Я также попытался перечислять все bar
варианты в foo
(т.е. с использованием 'a:b:cdef:'
для строка_опций) без их обработки, но мне нужно, чтобы удалить обработанные те из "[email protected]"
, как они происходят. Я не мог понять, как это сделать (shift
не позволяет указать позицию).
можно вручную восстановить новый список опций (см мой собственный ответ), но я задавался вопросом, есть ли лучший способ сделать это.
Одна проблема (казалось бы, непреодолимая): если вы видите '-a -b 3', это неизвестный параметр' -a' без аргумента, за которым следует ожидаемая опция '-b', или это неизвестный параметр' -a' с аргументом '-b', за которым следует позиционный аргумент' 3'? – chepner
@chepner: Хорошая точка. Другая проблема: параметр '-ab'' -a' с параметром-аргументом 'b' или группа опций для интерпретации как' -a' и '-b'? – mklement0
Это выглядит еще более insurmountabler :) – chepner