如果你是一个Linux系统管理员或者开发人员,那么你一定对Bash非常熟悉。Bash是一种Unix shell和命令语言,它提供了一些强大的工具来处理文件、文本和其他类型的数据。其中之一就是getopts命令,用于解析脚本中传入的选项参数。
高碑店网站制作公司哪家好,找成都创新互联!从网页设计、网站建设、微信开发、APP开发、成都响应式网站建设等网站项目制作,到程序开发,运营维护。成都创新互联自2013年创立以来到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选成都创新互联。
但是,在使用getopts时,有些人可能会遇到一个问题:当输入多个选项参数时,只有第一个被正确解析了,而其他的却无法识别。这时候就需要使用shift $((OPTIND-1))指令来移动位置参数。
那么为什么要这样做呢?原因很简单:getopts只能解析当前位置参数,并将下一个未知选项留给下次循环处理。换句话说,在每次循环结束后,getopts都会使$OPTIND自增1以跳过已经处理过的选项,并将其设置为下一个待处理选项所在位置。
因此,在while循环中进行完所有操作后,我们需要手动将$OPTIND重置回2(即第二个位置参数),然后再通过shift指令移除已经处理过的所有选项及其值。这样可以确保接下来的程序不会误认为剩余部分还包含前面已经解析过的选项。
下面是一个示例脚本,演示了如何在getopts之后使用shift $((OPTIND-1))指令:
```bash
#!/bin/bash
while getopts ":a:b:c:" opt; do
case $opt in
a) arg_a="$OPTARG"
;;
b) arg_b="$OPTARG"
c) arg_c="$OPTARG"
\?) echo "Invalid option -$OPTARG" >&2
exit 1
esac
done
# 移除已处理参数并将位置指针重置到第二个参数位置
shift $((OPTIND-1))
OPTIND=2
echo "arg_a=$arg_a, arg_b=$arg_b, arg_c=$arg_c"
# 处理剩余的无关参数
for i in "$@"; do
echo "Extra parameter: $i"
done
```
以上代码中,在while循环结束后,我们通过shift和$((OPTIND-1))移除了所有已经解析过的选项。然后,我们手动将$OPTIND设置为2,并开始处理剩余的未知参数。
总结一下:当你需要在Bash脚本中使用getopts命令来解析多个选项时,请记得在循环结束后使用shift和$((OPTIND-1))来移除所有已经解析过的选项及其值,并将位置指针重置回第二个参数位置。这样可以确保接下来程序不会误认为剩余部分还包含前面已经解析过的选项。
分享文章:为什么在getopts之后使用shift$((OPTIND-1))?
文章出自:http://www.mswzjz.cn/qtweb/news47/46797.html
攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能