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
相关产品推荐
相关产品推荐

