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

Bash脚本中grep命令调用命令行参数不生效问题求助

问题原因

你的脚本存在3个核心问题:

  • 拼写错误:需求是匹配ing结尾的单词,但你的正则写的是\w*ings,多了1个尾字母s,只能匹配到ings结尾的单词
  • 正则语法兼容问题:\w是Perl兼容正则(PCRE)/扩展正则(ERE)的语法,grep默认使用基础正则(BRE)不支持该语法。你在终端直接运行正常大概率是因为你的本地环境配置了grep的别名(比如alias grep='grep -E'或alias grep='grep -P'),而脚本执行时不会加载用户的私有别名配置,导致正则失效
  • 未给正则加引号导致转义失效:你直接写\w*ings没有用引号包裹,bash会先对反斜杠做转义解析,最终传给grep的参数实际是w*ings,完全不符合你的预期
修复方案

修正后的脚本如下:

#!/bin/bash
# -P 启用PCRE正则,支持\w语法;正则用单引号包裹避免bash转义,结尾用\b匹配单词边界保证确实是ing结尾
grep -ohP '\w*ing\b' "${1}"

如果你的环境不支持grep的-P参数,也可以用POSIX兼容的写法:

#!/bin/bash
grep -ohE '[[:alnum:]_]*ing\b' "${1}"

内容的提问来源于stack exchange,提问作者Ravi Teja Reddy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 00:15:03