2013-03-04 2 views
1

То, что я хочу сделать что-то вродеBash: более одного аргумента для каждого флага

$ ./my-script -a file1 file2 file3 -d file4 file5 file6 -r file7 file8 

или

$ ./my-script -a *.txt -d src1/*.tex sr2/*.tex 

Тем не менее, кажется, getopts поддерживает только ноль или один аргумент за флагом.

Есть ли хороший способ справиться с этим требованием? Я в настоящее время разбора аргумент сам ..

ответ

1

Укажите один разделенный запятыми (или какой-либо другой delimter) аргумент для каждого варианта:

$ ./my-script -a file1,file2,file3 -d file4,file5,file6 -r file7,file8 

Затем разделить отдельные аргументы после разбора опций. Один из способов сделать это:

IFS=, read a1 a2 a3 <<< $a_argument 

или

IFS=, read -a a <<< $a_argument 

Другим вариантом является процитировать аргумент, и пусть скрипт сделать расширение:

./my-script -a '*.tex' -d '*.pdf' 
$ ./my-script -a '*.txt' -d 'src1/*.tex sr2/*.tex' 

где в сценарий:

#!/bin/bash 

as=($a_argument) 
ds=($d_argument) 

Это похоже на то, как обрабатываются find, например, -name.

+0

Я хотел бы использовать скрипт следующим образом: ./my-script -a * .tex -d * .pdf, который не удобно добавлять в качестве разделителей, как вы предлагали. – zzk

+0

Я думаю, что это компромисс, чтобы сделать если я не хочу анализировать вручную ... – zzk

+0

Вы можете позволить шаблонам разворачиваться в скрипте вместо того, что происходит в командной строке. – William

Смежные вопросы