Bash:每个标志有多个参数

时间:2013-03-04 20:17:51

标签: bash command-line-arguments getopts

我想做的是像

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

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

但是,似乎getopts每个标志只支持零个或一个参数。

有没有办法处理这个要求?我正在解决这个问题。

1 个答案:

答案 0 :(得分:1)

为每个选项指定一个逗号分隔(或其他分隔符)参数:

$ ./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主要。