getopt不支持Bash中选项之间的空格?

时间:2016-02-24 22:55:36

标签: linux bash getopt

所以我的getopt代码如下所示:

    ARG_H=0
    ARG_V=0
    ARG_A=0
    ARG_N=5

    TEMP=`getopt -o hvn:a -n "vdu" -- "$1"`
    eval set -- "$TEMP"
    while true ; do
            case "$1" in
                    -h|--argh) ARG_H=1 ; shift ;;
                    -v|--argv) ARG_V=1 ; shift ;;
                    -n|--argn)
                            case "$2" in
                            "") shift 2 ;;
                            *) ARG_N=$2 ; shift 2 ;;
                            esac ;;
                    -a|--arga) ARG_A=1 ; shift ;;
                    --) shift ; break ;;
                    *) echo "error" ; exit 1 ;;
            esac
    done
    echo "$ARG_H"
    echo "$ARG_V"
    echo "$ARG_N"
    echo "$ARG_A"

但由于某种原因,它只有在我的命令行如下所示才有效:

./vdu -a-v-n15

./vdu -avn15

但如果我输入

./vdu -a -v -n 15

它只会注册第一个标志。为什么是这样?这段代码似乎与我一直在研究的getopts教程相同。

1 个答案:

答案 0 :(得分:0)

def show
  redirect_to "/some-url", status: 301
end

TEMP=`getopt -o hvn:a -n "vdu" -- "$1"` 只是你程序的第一个参数。使用$1传递所有参数。

$@

其他想法:

  • TEMP=`getopt -o hvn:a -n "vdu" -- "$@"` 传递给$0而不是硬编码程序名称是很传统的。
  • 如果将-neval set电话合并,则可以跳过临时变量。
  • 使用getopt代替$(...)被认为是一种很好的风格。 `...`可以更轻松地嵌套。

结果:

$(...)