向getopt传递参数时,参数的顺序必须与解析顺序相同吗?

发布于 2025-01-12 15:28:27 字数 1642 浏览 0 评论 0原文

我想使用 getopt 来解析我的输入,例如 --count=123 --range=456 --err

这是我的测试代码:

argv=$(getopt --name `basename $0` --options '' --longoptions err::,count:,range: -- "$@") 2>&1 || show_usage
eval "set -- ${argv}"
echo "debug> [$argv]"

while true; do
    case "$1" in
        "--count")
            echo "HitCount=$2"
            echo "debug> [$1/$2/$3/$4/$5/$6/$7/$8]"
            shift 2
            echo "debug> [$1/$2/$3/$4/$5/$6/$7/$8]"
            ;;
        "--range")
            echo "ScanRange=$2"
            echo "debug> [$1/$2/$3/$4/$5/$6/$7/$8]"
            shift 2
            echo "debug> [$1/$2/$3/$4/$5/$6/$7/$8]"
            break
            ;;
        "--")
            echo "debug> [$1/$2/$3/$4/$5/$6/$7/$8]"
            shift
            echo "debug> [$1/$2/$3/$4/$5/$6/$7/$8]"
            break
            ;;
        *)
            show_usage
            break
            ;;
    esac
done

test1: it's good

./getopt.sh  --count=1234 --range=5678
debug> [ --count '1234' --range '5678' --]
HitCount=1234
debug> [--count/1234/--range/5678/--///]
debug> [--range/5678/--/////]
ScanRange=5678
debug> [--range/5678/--/////]
debug> [--///////]

test2: 我只更改命令行中的顺序,但是它无法解析“--count”。我不知道为什么?

./getopt.sh --range=5678 --count=1234
debug> [ --range '5678' --count '1234' --]
ScanRange=5678
debug> [--range/5678/--count/1234/--///]
debug> [--count/1234/--/////]

I want to use getopt to parsing my input, such as --count=123 --range=456 --err

Here is my test code:

argv=$(getopt --name `basename $0` --options '' --longoptions err::,count:,range: -- "$@") 2>&1 || show_usage
eval "set -- ${argv}"
echo "debug> [$argv]"

while true; do
    case "$1" in
        "--count")
            echo "HitCount=$2"
            echo "debug> [$1/$2/$3/$4/$5/$6/$7/$8]"
            shift 2
            echo "debug> [$1/$2/$3/$4/$5/$6/$7/$8]"
            ;;
        "--range")
            echo "ScanRange=$2"
            echo "debug> [$1/$2/$3/$4/$5/$6/$7/$8]"
            shift 2
            echo "debug> [$1/$2/$3/$4/$5/$6/$7/$8]"
            break
            ;;
        "--")
            echo "debug> [$1/$2/$3/$4/$5/$6/$7/$8]"
            shift
            echo "debug> [$1/$2/$3/$4/$5/$6/$7/$8]"
            break
            ;;
        *)
            show_usage
            break
            ;;
    esac
done

test1: it's good

./getopt.sh  --count=1234 --range=5678
debug> [ --count '1234' --range '5678' --]
HitCount=1234
debug> [--count/1234/--range/5678/--///]
debug> [--range/5678/--/////]
ScanRange=5678
debug> [--range/5678/--/////]
debug> [--///////]

test2: I only change the order in command line, but it cannot parsed "--count". I don't know why?

./getopt.sh --range=5678 --count=1234
debug> [ --range '5678' --count '1234' --]
ScanRange=5678
debug> [--range/5678/--count/1234/--///]
debug> [--count/1234/--/////]

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

℉服软 2025-01-19 15:28:27

向getopt传递参数时,参数的顺序必须与解析顺序一致吗?

不。

它无法解析“--count”。不知道为什么?

"--" 之前有 break,因此它会中断循环。

When passing parameters to getopt, does the order must same as the parsing order?

No.

it cannot parsed "--count". I don't know why?

You have break before "--" so it breaks the loop.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文