Я использую встроенный «getopts» ksh для обработки параметров командной строки, и я ищу чистый/стандартный способ «отменить» вариант в командной строке , Я не знаю, является ли это техническим вопросом о getopts или более вопросом стиля/стандартов. В любом случае, я понимаю, что getopts обрабатывает свои аргументы (по умолчанию $ *) слева направо, и я надеюсь использовать это, чтобы вторая спецификация опции «выключила» опцию.ksh «getopts» - снятие опции
Для параметров, которые принимают аргумент параметра, это не проблема. В моем getopts обработки дела о я просто говорю, для «-x» варианта, например:
x) x_arg=$OPTARG
;;
и последний экземпляр «-x» в командной строке выигрывает, что это то, что я хочу.
Проблема связана с параметрами, которые не принимают аргумент опции. Если опция просто переключатель/флаг, то в моем случае заявление будет просто иметь что-то вроде:
x) x_specified=1
;;
С опцией, как это все, что я могу действительно сделать, это добавить «-X» снова в командной строке, и то же самое происходит: «x_specified = 1» выполняется снова. Каков наилучший/простой/самый простой/стандартный способ «unset x_specified»? Это мой вопрос.
Я надеялся вызвать функцию getopts, которая позволяет либо «+», либо «-» предшествовать буквенным обозначениям опций, но кажется, что в цикле обработки getopts нет возможности указать, были ли использованы «+» или «-» , Если бы был способ сказать, я мог бы принять стандарт, который «+» означает отключить настройку. Другая вещь, которую я мог бы сделать, это что-то вроде:
x) if [[ -z $x_specified ]] ; then
x_specified=1
else
unset x_specified
fi
;;
Теперь опция -x будет переключаться; каждый раз, когда он отображается в командной строке, настройка изменяется. Тем не менее, мне бы хотелось, чтобы в командной строке говорилось: «выключите параметр -x», а не просто «переключите параметр -x». Я мог бы также выбрать другую букву, например. «X», как способ отключить его, но многие из моих сценариев уже используют как в верхнем, так и в нижнем регистре версии одной и той же буквы, чтобы обозначать разные вещи, и если мне нужно выбрать другую случайную букву, чтобы означать «поворот» off -x ", то это не очень мнемонично, и мои скрипты достаточно трудны, чтобы узнать, как их использовать.
Наконец, вы можете спросить: «Если вы хотите -x отключиться в командной строке, то почему вы включаете его в первую очередь?» Обработка параметров в моих сценариях проходит через многоэтапный процесс. Проверяются параметры командной строки, а также проверяется файл конфигурации для параметров, и между ними есть приоритет. Все это отлично подходит для опций, которые принимают аргумент параметра, но схема разваливается для вариантов, которые этого не делают.
Это хорошо работает. Если у opt var есть ведущий «+», то я могу сделать то, что мне нужно сделать в моем цикле getopts. Что касается ведущей «:» в строке опций, я думаю, что это просто для управления поведением, когда отображается недопустимая опция. Итак, если вы хотите разрешить «+», а также «-» вводить параметры, добавьте «+» в начало строки опций. Если вы также хотите вызвать специальное поведение, связанное с «:», то добавьте «: +» в начало строки опций. –