gpt4 book ai didi

bash - 如何使用 getopts 忽略无效参数并继续解析?

转载 作者:行者123 更新时间:2023-11-29 09:10:05 24 4
gpt4 key购买 nike

我有以下简单的代码:

#!/usr/bin/env bash
while getopts :f arg; do
case $arg in
f) echo Option $arg specified. ;;
*) echo Unknown option: $OPTARG. ;;
esac
done

它适用于简单的场景,例如:

$ ./test.sh -f
Option f specified.
$ ./test.sh -a -f
Unknown option: a.
Option f specified.

但是它不适用于以下情况:

$ ./test.sh foo -f

$ ./test.sh -a abc -f
Unknown option: a.

如何修正以上代码示例以支持无效参数?

最佳答案

似乎 getopts 只是在找到一些未知的非选项参数 (abc) 后退出循环。

我通过将 getopts 循环包装到另一个循环中找到了以下解决方法:

#!/usr/bin/env bash
while :; do
while getopts :f arg; do
case $arg in
f)
echo Option $arg specified.
;;
*)
echo Unknown option: $OPTARG.
;;
esac
done
((OPTIND++))
[ $OPTIND -gt $# ] && break
done

然后跳过无效参数并在达到最大参数时中断循环。

输出:

$ ./test.sh abc -f
Option f specified.
$ ./test.sh -a abc -f
Unknown option: a.
Option f specified.

关于bash - 如何使用 getopts 忽略无效参数并继续解析?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34536116/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com