bash:getopts:用参数解析两个选项

时间:2014-05-01 13:32:20

标签: bash getopts

我试图解析两个都需要参数的选项。

#!/bin/bash

while getopts "a:b:" opt; do
    case $opt in
    a)
        echo "a has the argument $OPTARG."
        shift
        ;;
    b)
        echo "b has the argument $OPTARG."
        shift
        ;;
    esac
done

我期望这个脚本打印出a和b的参数。但输出只是:

$ sh ./cmd_parse_test.sh -a foo -b bar
a has the argument foo.

我做错了什么?

1 个答案:

答案 0 :(得分:2)

你不必shift来获得下一个论点。只需转储您想要的任何内容,然后继续下一次迭代,如:

#!/bin/bash

while getopts "a:b:" opt; do
    case $opt in
    a)
        echo "a has the argument $OPTARG."
        ;;
    b)
        echo "b has the argument $OPTARG."
        ;;
    esac
done

哪个输出:

$ ./cmd_parse_test.sh -a foo -b bar
a has the argument foo.
b has the argument bar.

另请注意,您不必使用sh运行脚本,因为您已经将 shbang 设置为使用bash。< / p>