bash - 如何在 bash 命令行参数范围内进行搜索
问题描述
假设我有程序test.sh
,它有参数,有些是可选的,有些没有。
例如:
./test.sh --foo /path/to/file --baz --bar1 --bar2 --bar3
其中foo
和baz
以及路径是必需的,而bar
s 是可选参数。
现在,我希望能够使路径顺序之后的所有内容都变得不敏感。
我可以使用
if [[ "$3" == "--baz" ]] || [[ "$4" == "--baz" ]] || ... || [[ "${(n-1)}" == "--baz" ]] || [[ "${n}" == "--baz" ]]
但这很慢而且很乱,即使对我来说也是如此。
理想情况下,我会有类似的东西:
if [[ ${n > 2} == "--baz" ]]; then
解决方案
根据以下答案:
你可以想出以下答案:
[[ " ${@:3} " =~ " --baz " ]] && echo yes || echo no
如果你有类似的东西,这可能会失败
command --foo /path/to/file --flag1 option1 --flag2 "foo --baz bar" --flag3
哪里foo --baz bar
可以选择--flag2
另一种更安全的方法是:
for arg in "${@:3}"; do
[[ "${arg}" != "--baz" ]] && continue
# perform action here if --baz is found
set-of-commands
# need this line for early return
break
done
推荐阅读
- kubernetes - 处理连接到不同副本的 websocket 连接
- javascript - React Native Map 组件不起作用
- javascript - 每当我重新加载时,电子应用程序就会变为空白
- arrays - 如果变量是函数参数,则使用函数填充字符串变量不起作用
- python - /admin/images/images/add/ NOT NULL 约束处的 IntegrityError 失败:images_images.user_id
- jenkins - ZAP Spider 扫描显示 0% 状态并在 Jenkins 中终止
- scala - 返回类型取决于Scala中的输入类型的通用函数?
- java - BlockingQueue的实例安全HashSet
- css - 在 React 中使用 SASS 子类
- flutter - 无法显示网络图像