bash - 在switch case中的getopts

时间:2017-08-07 08:01:04

标签: bash shell arguments getopts

我试图在交换机案例循环中使用getopts。 如果我只使用getopts或只使用开关盒,那么当我将这两个组合时,不会触发getopts。

我已经搜索了很多,但是我对猫鳍有任何提及如何将它们组合起来,问题我错过了一些愚蠢的东西所以给我...

这是代码本质。

#!/bin/bash
case $1 in

        ver)
            echo "vesion"
            exit 0
        ;;
        op)
           while getopts ":a" opt; do
                case $opt in
                 a)
                   echo "-a was triggered!" >&2
                 ;;
                \?)
                   echo "Invalid option: -$OPTARG" >&2
                 ;;
                esac
        done
        ;;
esac

当我这样做时

# bash -x test.sh op -a

我得到了

+ case $1 in
+ getopts :a opt

(没有调试我什么也没得到)

我错过了将这两个结合起来的内容

谢谢:)

1 个答案:

答案 0 :(得分:2)

在调用HMM之前,您应该在shift选项的开头添加op)指令,以便使用getopts参数本身。否则,op将分析的第一个参数是getopts,它将默默地停止(选项结束)。