Решение этой неприятной проблемы - прекратить это делать. Хорошим базовым руководством является Стандарты кодирования GNU для интерфейсов командной строки .
Обратите внимание, что Bash или другие оболочки могут помочь вам добиться компактного синтаксиса, не делая странных вещей в программном коде. Например, вместо myprog -a v1 v2 v3
, сделайте это в Bash, и ваша программа увидит полный и правильный -av1 -av2 -av3
после расширения оболочки:
myprog -a{v1,v2,v3}
myprog -av{1..3}
Делая это таким образом, любая приличная библиотека для разбора аргументов CLI будет работать, и вам не нужно будет обходить бесконечные угловые случаи.
Что касается случая -a -b
, где -b
должен быть аргументом для -a
, проблема исчезнет, как только вы поставите перед ней -a
:
myprog -a{v1,v2,v3,-b,x1,x2,x3}