如果getopts
是 bash 函数,根据我的理解,您需要传递$@
- 整个参数以便getopts
让函数知道您有什么样的参数才能继续,对吗?
在我看来,你不需要它,那么如何getopts
知道我在当前范围内有哪些参数呢?它是否有办法像其他高级语言一样跟踪先前的调用?
while getopts abcde opt; do
˄˄˄˄˄ <-- you only need to pass the argument labels here,
how getopts knows what arguments I have
case $opt in
...
esac
done
答案1
getopts
是shell内置的,所以可以$@
直接引用。它还设置 shell 变量OPTARG
和OPTIND
。 (请注意,在函数内部,getopts
将引用该函数而不是全局参数。如果您想要可重复(幂等)函数调用,则$@
应该本地化。)OPTIND
概要(摘要)是
getopts optstring name [arg ...]
并且描述是这样的,
getopts
shell 程序使用它来解析位置参数。optstring
包含要识别的选项字符;如果一个字符后面跟着一个冒号,则该选项应该有一个参数,该参数应该用空格与其分隔。
请注意(至少)bash
文档 ( man bash
) 还指出,
getopts
通常解析位置参数,但如果提供更多参数作为 arg 值,getopts
则解析这些参数。
参考