尝试管道输出时遭遇Bash语法错误的问题求助
解决Bash脚本里的
|&语法错误问题 嘿,这个错误我太熟了——问题就出在你脚本里的|&上!
为啥会报错?
你写的npm test |& grep -v '[HPM]'里,&是HTML里用来转义&的特殊字符,但Bash脚本根本不吃这一套。Bash里要同时捕获命令的stdout和stderr并传给下一个命令,用的是|&(等价于2>&1 |)。而你的脚本里把|&丢给Bash,它会把这解析成|&加上多余的amp;,自然就报“unexpected token”的语法错误了。
怎么改?
直接把|&换成|&就行,修正后的完整脚本示例:
#!/bin/bash npm test |& grep -v '[HPM]' if [[ $? -ne 0 ]]; then # 这里可以补上你需要的错误处理逻辑,比如提示失败、退出脚本等 echo "测试用例执行失败啦" exit 1 fi
要是你需要兼容一些老版本的Bash(有些旧版本不支持|&语法),也可以用更通用的写法:
npm test 2>&1 | grep -v '[HPM]'
这个写法和|&功能完全一样,都是把标准错误输出重定向到标准输出,再通过管道交给grep过滤掉带[HPM]的行。
内容的提问来源于stack exchange,提问作者arctic
相关产品推荐
相关产品推荐

