Существуют ли какие-либо встроенные инструменты, которые распознают -x
и --xxxx
как переключатели, а не аргументы, или вам нужно пройти через все входные переменные, проверить на наличие тире, а затем проанализировать аргументы?
shell
shell-script
options
getopts
user394
источник
источник
getopt
перед использованием его всегда следует проверять как GNU getopt, но вы все равно не должны его использовать, так как в любом случаеgetopts
он более переносим (и, как правило, лучше). Если вы делаете потребность назвать его по какой - то причине, называют его в GNU-определенным образом, и убедитесь , чтоGETOPT_COMPATIBLE
это не в окружающей среде.while getopts "ab:" opt
?:
после опции указывает, что она требует аргумента. A:
в качестве первого символа означает подавление сообщений об ошибках.Я предполагаю, что вы используете Bash или подобное. Пример:
источник
+=
с массивом. Не знал, что ты мог сделать это. Ницца!Вы должны написать цикл для разбора параметров. На самом деле вы можете использовать
getopts
команду, чтобы сделать это легко.Это простой пример со
getopts
страницы руководства:источник
Недавно я написал сценарий для работы, которая была бы универсальной и позволяла использовать разные типы переключателей в любом порядке. Я не могу раскрыть полный сценарий по очевидным юридическим причинам (не говоря уже о том, что у меня его сейчас нет), но вот суть этого ... вы можете поместить его в подпрограмму и вызвать в конце вашего сценария:
Я рекомендую ограничить ваш bash скрипт до 400 строк / 15k символов; Мой вышеупомянутый сценарий вырос до этого размера и стало очень трудно работать. Я начал переписывать его на Perl, который гораздо лучше подходит для этой задачи. Имейте это в виду, работая над своими скриптами в bash. Bash отлично подходит для небольших сценариев и подписчиков, но для чего-то более сложного, и вам лучше написать его на Perl.
Обратите внимание, я не проверял вышеизложенное, поэтому, вероятно, это не сработало, но вы получили общее представление об этом.
источник
options
в конце, неверно, оно вернется-bash: syntax error near unexpected token $@
. Назовите это какoptions "$@"
.while
условие не должно быть(($#))
вместо этого?$#
? Редактировать: вы правы. Исправлено этоwhile (( "$#" ))