Я помню, как где-то видел bash
скрипт, использующий case
и shift
для просмотра списка позиционных параметров, разбора флагов и опций с аргументами, когда он их встречает, и удаления их после анализа, чтобы оставить только пустые аргументы, которые позже обрабатываются остальной частью скрипт.
Например, при синтаксическом анализе командной строки cp -R file1 -t /mybackup file2 -f
он сначала будет проходить по параметрам, распознавать, что пользователь запросил переход в каталоги -R
, указал цель -t /mybackup
и принудительно выполнять копирование -f
, и удалить их из списка параметров, оставив программа для обработки file1 file2
в качестве оставшихся аргументов.
Но я, кажется, не могу вспомнить / выяснить, какой сценарий я когда-либо видел. Я просто хотел бы иметь возможность сделать это. Я гуглял по разным сайтам и добавлял список соответствующих страниц, которые я изучал.
Вопрос на этом веб-сайте специально задавался о «опционах, не зависящих от порядка», но как в единственном ответе, так и в ответе на вопрос, на который он был поставлен, не рассматриваются случаи, подобные описанным выше, когда варианты смешиваются с обычными аргументами, которые, как я полагаю, были причина для человека, чтобы конкретно упомянуть , независимые от порядка варианты.
Поскольку bash
встроенная getopts
функция, по - видимому, останавливается на первом аргументе, не являющемся опцией, она кажется недостаточной в качестве решения. Вот почему на странице Wooledge BashFAQ (см. Ниже) объясняется, как изменить порядок аргументов. Но я бы хотел избежать создания нескольких массивов, если список аргументов довольно длинный.
Так shift
как не поддерживает выталкивание отдельных аргументов из середины списка параметров, я не уверен, какой простой способ реализовать то, что я спрашиваю.
Я хотел бы услышать, есть ли у кого-нибудь решения для удаления аргументов из середины списка параметров без создания нового массива.
Страницы, которые я уже видел:
- http://mywiki.wooledge.org/ComplexOptionParsing#Rearranging_arguments
- http://mywiki.wooledge.org/BashFAQ/035
- Использование getopts в сценарии оболочки bash для получения длинных и коротких параметров командной строки
- http://wiki.bash-hackers.org/scripting/posparams
- http://wiki.bash-hackers.org/howto/getopts_tutorial
- аргумент bash для аргументов в $ @
- Каков канонический способ реализации независимых от порядка опций в скриптах bash?
- Как мне работать с переключателями в сценарии оболочки?