我有一个通用库,用于在多个脚本中解析命令行选项,但是我也希望我的个人脚本也能够处理参数...例如common.sh:func...
我有一个通用库,用于从多个脚本解析命令行选项,但我还希望我的各个脚本也能够处理参数...例如
通用.sh:
function get_options {
echo -e "in getoptions"
echo $OPTIND
while getopts ":ab:" optionName; do
[ ... processing code ... ]
done
}
灰
. ./common.sh
function get_local_options {
echo -e "in getoptions"
echo $OPTIND
while getopts ":xy:" optionName; do
[ ... processing code ... ]
done
}
get_local_options $*
OPTIND=1
get_options $*
问题是,如果我用以下命令调用 a.sh:
a.sh -x -y foo -a -b bar
get_options 在 \'foo\' 处停止处理,因为它在第一个 \'非选项\' 处停止
有什么办法可以解决这个问题而不用自己重写吗?
我设法让它工作,不确定这是否是你想要的:
$ cat common.sh
function get_options {
while getopts ":ab:" optionName
do
echo "get_options: OPTARG: $OPTARG, optionName: $optionName"
done
}
$ cat a.sh
#!/bin/bash
. ./common.sh
function get_local_options {
while getopts ":xy:" optionName; do
case $optionName in
x|y)
echo "get_local_options: OPTARG: $OPTARG, optionName: $optionName"
last=$OPTIND;;
*) echo "get_local_options, done with $optionName"
break;;
esac;
done
}
last=1
get_local_options $*
shift $(($last - 1))
OPTIND=1
get_options $*
$ ./a.sh -x -y foo -a -b bar
get_local_options: OPTARG: , optionName: x
get_local_options: OPTARG: foo, optionName: y
get_local_options, done with ?
get_options: OPTARG: , optionName: a
get_options: OPTARG: bar, optionName: b
$ ./a.sh -a -b bar
get_local_options, done with ?
get_options: OPTARG: , optionName: a
get_options: OPTARG: bar, optionName: b