You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bash中检测用户输入是否包含数组中的子字符串?

解决Bash子串匹配问题

你可以通过将关键词数组转换为正则表达式的“或”模式来实现子串匹配,不用循环,写法和你原来的思路类似,具体调整如下:

修改后的代码

keyword_array=("branch" "switch")
arg="switch test"  # 现在这个输入可以匹配
#arg="branch abc"  # 同样可以匹配
#arg="test case"   # 这个不会匹配

# 将数组元素拼接成正则的"或"模式:branch|switch
pattern=$(IFS='|'; echo "${keyword_array[*]}")

if [[ $arg =~ $pattern ]]; then
    echo "arg matches"
else
    echo "arg does not match"
fi

原理说明

  1. 原来的写法逻辑搞反了:是检查数组转成的空格字符串里是否包含完整的arg,现在要反过来检查arg里是否存在数组中的任意关键词。
  2. 用IFS='|'临时修改字段分隔符,再通过${keyword_array[*]}把数组元素用|连接,形成正则的分支匹配模式(branch|switch),表示匹配任意一个关键词子串。
  3. 在[[ ]]的正则匹配中,右边的模式变量不要加引号,否则会被当成普通字符串字面量,失去正则的分支匹配功能。

注意事项

如果你的关键词里包含正则特殊字符(比如.、*、?等),需要先对这些字符进行转义,避免正则解析出错。比如关键词是branch.,要转成branch\.再加入数组。

内容的提问来源于stack exchange,提问作者Bagels1b

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 21:55:20