我不是一个 Linux 爱好者,但我被困在一些脚本中,我必须为我的项目阅读这些脚本。那么任何人都可以帮助我这个命令在做什么吗?
shift $(($optind - 1))
答案1
shift $((OPTIND-1))
(注意OPTIND
是大写)通常在getopts
while
循环之后立即找到。$OPTIND
是 找到的选项数getopts
。
正如 pauljohn32 在评论中提到的那样,严格来说,OPTIND
给出了下一个命令行参数。
来自 GNUBash 参考手册:
getopts optstring 名称 [args]
getopts
shell 脚本使用它来解析位置参数。optstring
包含要识别的选项字符;如果一个字符后面跟着一个冒号,则该选项应该有一个参数,该参数应该用空格与其分隔。冒号(':')和问号('?')不能用作选项字符。每次调用时,getopts
将下一个选项放入 shell 变量名称中,name
如果不存在则进行初始化,并将下一个要处理的参数的索引放入变量中OPTIND
。OPTIND
每次调用 shell 或 shell 脚本时都会初始化为 1。当选项需要参数时,getopts 将该参数放入变量 中OPTARG
。外壳不会OPTIND
自动重置;getopts
如果要使用一组新参数,则必须在同一 shell 调用中的多次调用之间手动重置它 。当遇到选项末尾时,
getopts
退出并返回大于零的值。OPTIND
设置为第一个非选项参数的索引,名称设置为“?”。
getopts
通常解析位置参数,但如果 中给出了更多参数args
,getopts
则解析这些参数。
shift
n
删除n位置参数列表中的字符串。因此,从参数列表中shift $((OPTIND-1))
删除已解析的所有选项,因此在此之后,将引用传递给脚本的第一个非选项参数。getopts
$1
更新
正如 mikeserv 在评论中提到的那样,shift $((OPTIND-1))
可能不安全。为了防止不必要的分词等,全部参数扩展应该用双引号引起来。所以该命令的安全形式是
shift "$((OPTIND-1))"
答案2
$((...))
只是计算东西。在你的例子中,它取值$optint
并减去 1。
shift
删除位置参数。在您的情况下,它会删除optint-1
参数。
help getopts
欲了解更多信息,请查看help shift
、查看man bash
“算术扩展”,尤其是谷歌搜索getopts
。