调用getopts后执行位置参数偏移(shift)的目的是什么?
为什么要执行
shift "$(( OPTIND - 1 ))" 当用getopts处理脚本的命令行选项时,OPTIND会记录下下一个待处理的位置参数的索引。比如你执行脚本时输入./script.sh -a -b foo bar,getopts处理完-a和-b后,OPTIND的值会变成3,指向第一个非选项参数foo。
这时候执行shift "$(( OPTIND - 1 ))",就是把前面已经被getopts处理过的(也就是前2个)位置参数从参数列表里移除。执行完之后,原来的$1就变成了foo,$2变成bar,剩下的参数就都是纯粹的非选项参数了,后面的脚本逻辑可以直接用$1、$2来处理这些业务参数,不用再管前面的选项。
举个简单例子:
#!/bin/bash while getopts "ab" opt; do case $opt in a) echo "处理选项-a" ;; b) echo "处理选项-b" ;; esac done shift "$(( OPTIND - 1 ))" echo "剩余的非选项参数:$@"
运行./test.sh -a -b hello world,输出就是:
处理选项-a 处理选项-b 剩余的非选项参数:hello world
简单说,这个操作的核心目的就是清理掉已经处理完毕的选项参数,让脚本可以更方便地处理剩下的非选项业务参数。
内容的提问来源于stack exchange,提问作者Dilna
相关产品推荐
相关产品推荐

