使用多个值存储bash脚本参数

时间:2017-09-19 20:40:40

标签: bash shell

我希望能够将输入解析为类似于以下内容的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

1 个答案:

答案 0 :(得分:4)

一种常规做法(,如果你将要这样做)是关闭多个参数。那就是:

variables=( )
case $key in
  --variables)
    while (( "$#" >= 2 )) && ! [[ $2 = --* ]]; do
      variables+=( "$2" )
      shift
    done
    ;;
esac

也就是说,构建调用约定更常见,因此调用者会在每个后续变量中传递一个-V--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