![bash getopts 如何知道调用有哪些参数](https://linux22.com/image/226672/bash%20getopts%20%E5%A6%82%E4%BD%95%E7%9F%A5%E9%81%93%E8%B0%83%E7%94%A8%E6%9C%89%E5%93%AA%E4%BA%9B%E5%8F%82%E6%95%B0.png)
如果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
则解析这些参数。
参考