我希望能够解析 bash shell 脚本的输入,如下所示。
myscript.sh --casename obstacle1 --output en --variables v P pResidualTT
到目前为止,我最好的方法都失败了,因为最后一个参数有多个值。第一个参数只能有 1 个值,但第三个参数可以有大于 1 的任何值。有没有办法指定应该抓取第三个参数之后到下一组“--”的所有内容?我假设用户不限于按照我所显示的顺序给出参数。
casename=notset
variables=notset
output_format=notset
while [[ $# -gt 1 ]]
do
key="$1"
case $key in
--casename)
casename=$2
shift
;;
--output)
output_format=$2
shift
;;
--variables)
variables="$2"
shift
;;
*)
echo configure option \'$1\' not understood!
echo use ./configure --help to see correct usage!
exit -1
break
;;
esac
shift
done
echo $casename
echo $output_format
echo $variables
一种常规做法(if你要做的就是关闭多个参数。那是:
variables=( )
case $key in
--variables)
while (( "$#" >= 2 )) && ! [[ $2 = --* ]]; do
variables+=( "$2" )
shift
done
;;
esac
也就是说,更常见的是构建调用约定,以便调用者可以传递一个-V
or --variable
每个以下变量的参数——也就是说,类似:
myscript --casename obstacle1 --output en -V=v -V=p -V=pResidualTT
...在这种情况下你只需要:
case $key in
-V=*|--variable=*) variables+=( "${1#*=}" );;
-V|--variable) variables+=( "$2" ); shift;;
esac
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)