使用getopt解析Bash中的长样式参数时出现问题

使用getopt解析Bash中的长样式参数时出现问题,bash,getopt,Bash,Getopt,我的这个脚本除了--norecopy之外,似乎没有识别任何其他选项,甚至只有当它被指定为我脚本的第二个参数时才识别 有人能指出我做错了什么吗 #!/usr/bin/env bash norecopy=false noencrypt=false nopackage=false # read the option OPTS=`getopt --long norecopy,noencrypt,nopackage -n 'build' -- "$@"` eval set -- "$OPTS" w

我的这个脚本除了--norecopy之外,似乎没有识别任何其他选项,甚至只有当它被指定为我脚本的第二个参数时才识别

有人能指出我做错了什么吗

#!/usr/bin/env bash

norecopy=false
noencrypt=false
nopackage=false

# read the option
OPTS=`getopt --long norecopy,noencrypt,nopackage -n 'build' -- "$@"`

eval set -- "$OPTS"

while true ; do
    case "$1" in
        --norecopy ) echo "found norecopy" ; norecopy=true ; shift ;;
        --noencrypt ) echo "found noencrypt" ; noencrypt=true ; shift ;;
        --nopackage ) echo "found nopackage" ; nopackage=true ; shift ;;
        -- ) echo "Got here" ; shift ; break ;;
        * ) echo "unsupported option!" ; break ;;
    esac
done

exit 0
下面的代码有效

#!/usr/bin/env bash

norecopy=false
noencrypt=false
nopackage=false

# read the option
OPTS=`getopt --long norecopy,noencrypt,nopackage -n 'build' - "$@"`

eval set -- "$OPTS"

while true ; do
    case "$1" in
        --norecopy ) echo "found norecopy" ; norecopy=true ; shift ;;
        --noencrypt ) echo "found noencrypt" ; noencrypt=true ; shift ;;
        --nopackage ) echo "found nopackage" ; nopackage=true ; shift ;;
        -- ) echo "Got here" ; shift ; break ;;
        * ) echo "unsupported option!" ; break ;;
    esac
done

exit 0
我添加了“set-x”来调试这个问题。我看到getopt命令中的一个连字符(而不是两个连续的连字符)按预期打印输出。请参见以下两个命令:

$ getopt --long norecopy,noencrypt,nopackage -n build -- --norecopy --noencrypt --nopackage
 --noencrypt --nopackage --

$ getopt --long norecopy,noencrypt,nopackage -n build - --norecopy --noencrypt --nopackage
 --norecopy --noencrypt --nopackage --

我仍然不知道getopt行为背后的原因。论坛上有getopt源代码经验的人可能会提供帮助。然而,这一变化应该让你走

非常感谢。多么神秘的一次修理!