Getopt: флаг, использующий несколько оптаргов - PullRequest
0 голосов
/ 28 ноября 2018

Как я могу использовать два аргумента для одного флага?

Например:

./xampl -c foo bar

вернет:

foobar

Я посмотрел источниккод gnu cat и freebsd ls, но не смог найти потенциальных клиентов

Я новичок в C и компетентный сценарист bash.

1 Ответ

0 голосов
/ 28 ноября 2018

Стандартный материал getopt не имеет возможности сделать это, он допускает добавление одного параметра к параметру (с :), например -cfoo (часть аргумента параметра) или -c foo (вследующий аргумент).Это также может быть необязательным, если вы используете ::, хотя я считаю, что оно должно быть расширением самого аргумента опции, а не отдельным аргументом.

Он не может принимать более одного аргумента послеОпция аргумента и объединить их в один вариант.Вы можете заключить их в кавычки, чтобы заставить его использовать аргумент single , например:

-c "foo bar"

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

-c foobar

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

Без сомнения, вы могли бы изменить getopt, чтобы сделать это, например, допуская что-то вродеabc[2,collapse] (вместо abc:), чтобы указать, что -c требуется два аргумента, между которыми должны быть удалены пробелы.Но это кажется довольно трудоемким занятием для чего-то, что может быть легче обойти.

...