Shell脚本:getopt:什么 - )是什么意思?

时间:2018-02-26 02:28:52

标签: bash shell getopt

我正在编写一个shell脚本来处理参数列表,我使用了getopt。 但我发现它没有按预期工作。 我设法将这个问题缩小到这些界限:

case "$1" in
.....
--)
shift
break
;;

无论我提供什么参数(例如--)case),我都可以看到./run -r -d始终与./run匹配。我不确定这是什么" --"意味着或应该做什么

我搜索了很多,但没有一个结果解释了这个" --"装置

我的shell脚本如下所示,我可以看到echo "in --)"始终打印。我不确定这个in --)

的含义是什么
OPTIONS=di:r:v
LONGOPTIONS=debug,inputdir:,random:,verbose

PARSED=$(getopt --options=$OPTIONS --longoptions=$LONGOPTIONS --name "$0" -- "$@")
if [[ $? -ne 0 ]]; then
    echo "I’m sorry, `getopt` failed in this environment."
    exit 2
fi

eval set -- "$PARSED"

echo "$#"


while true; do
    case "$1" in
        -d|--debug)
            d=y
            shift
            ;;
        -i|--inputdir)
            inputFolder=y
            folder="$2"
            shift 2
            ;;
        -v|--verbose)
            v=y
            shift
            ;;
        -r|--random)
            randNumFile="$2"
            shift 2
            ;;
        --)
            echo "in --)"   #this echo always prints
            shift
            break
            ;;
        *)
            echo "arguments error"
            exit
            ;;
    esac
done

echo "$#"

1 个答案:

答案 0 :(得分:2)

此处man getopt

  

通常,在生成所有选项及其参数之前,不会生成非选项参数输出。那么' - '生成为单个参数,然后按照它们的顺序生成非选项参数,每个参数都作为单独的参数。

换句话说,getopt会在所有选项后生成--,因此您知道何时停止对它们进行循环。 --之后的所有单词都应被视为非选项参数,即使它们以破折号开头。