getopts - 如果标志为空 getopts 使用下一个标志

Gil*_*pid 5 bash getopts

我正在尝试将 getopts 用于 bash 脚本。该脚本可以有标志,所有这些标志都是强制性的,并且需要包含一个值。当应该包含值的强制标志之一为空时,getopts 使用下一个行标志作为其内容。我该如何防止这种情况?

这是我的例子:

#!/bin/bash

while getopts "A:B:" OPTION
do
        case $OPTION in
        A)
        GILIA="$GILIA $OPTARG"
        echo GILIA $GILIA
        ;;
        B)
        GILIB="$GILIB $OPTARG"
        echo GILIB $GILIB
        ;;
        esac
done
Run Code Online (Sandbox Code Playgroud)

当使用两个带有值的标志时:

./test_opt2 -A aaa -B bbb
GILIA aaa
GILIB bbb
Run Code Online (Sandbox Code Playgroud)

当使用“-A”标志为空时:

./test_opt2 -A  -B bbb
GILIA -B
Run Code Online (Sandbox Code Playgroud)

我知道这是 getopts 的正常/典型行为,并且我确信有一种方法可以解决这个问题......

有任何想法吗?

Jul*_*ian 2

如果你想向 then 传递一个空白参数 -A

./test_opt2 -A '' -B bbb
Run Code Online (Sandbox Code Playgroud)

如果您希望脚本接受-A而不带参数,则更改脚本:

while getopts "AB:" OPTION
Run Code Online (Sandbox Code Playgroud)

然后,脚本将期望 -A 从不接受参数。