如何在Getopts中实现单个选项触发多个选项的执行效果
实现getopts中-c选项触发-a和-b的效果
我懂你想要的效果——让-c选项同时触发-a和-b的输出逻辑对吧?你原来写的:ab是行不通的,因为:在Bash里只是一个空操作符,不会触发任何其他选项的逻辑。下面给你两种实用的解决方案:
方案1:封装逻辑为函数(推荐)
把-a和-b对应的输出逻辑抽成独立函数,这样-c可以直接调用这两个函数,代码更整洁也更容易维护:
#!/bin/bash # 封装-a对应的输出逻辑 print_hello() { echo "Hello" } # 封装-b对应的输出逻辑 print_goodbye() { echo "Goodbye" } while getopts :abc opt do case $opt in a) print_hello ;; b) print_goodbye ;; c) print_hello print_goodbye ;; esac done
测试效果:
- 执行
./script.sh -a会输出Hello - 执行
./script.sh -b会输出Goodbye - 执行
./script.sh -c会依次输出Hello和Goodbye
方案2:直接复用代码(不推荐,冗余)
如果不想用函数,也可以直接在c的分支里重复a和b的代码,但这种方式会导致代码冗余,后续修改逻辑时要改多处,所以不建议:
#!/bin/bash while getopts :abc opt do case $opt in a) echo "Hello" ;; b) echo "Goodbye" ;; c) echo "Hello" echo "Goodbye" ;; esac done
为什么原来的:ab没用?
你写的:ab是Bash的空命令,它什么都不做,只是返回成功状态码,所以自然不会触发-a和-b的输出逻辑。getopts选项字符串里的:是用来处理静默错误的,但case分支里的:ab和它完全是两回事哦。
内容的提问来源于stack exchange,提问作者Ricardo Quezada
相关产品推荐
相关产品推荐

