我试图解析两个都需要参数的选项。
#!/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.
我做错了什么?
答案 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>