Bash历史扩展(带单词选择)错误处理|&序列问题问询
Bash 中
|& 与历史扩展 !* 组合的兼容性问题解答 1. 是否为已知Bug?
这是Bash历史扩展模块的已知问题。历史扩展在拆分命令行单词时,会将复合重定向符号|&拆分为|和&两个独立单词,破坏了Bash对该符号的语法识别,最终导致syntax error near unexpected token '&'的报错。
2. 除2>&1或手动编辑外的临时解决方案
- 使用历史事件编号加单词选择:先通过
history查看目标命令的事件编号(假设为123),执行echo zero !123:*,这种方式会完整保留原命令中的|&符号。 - 启用
histverify选项:执行set -o histverify,历史扩展后的命令会先显示在命令行,你可以直接回车执行,也能快速修正|&的拆分问题后再运行,比手动编辑历史更高效。 - 注意:用引号包裹
!*(如echo zero "!*")仅能在不需要保留原管道结构的场景下使用,因为它会把后续内容作为单个参数传递,可能不符合需求。
3. 修复该问题的Bash版本
该问题在Bash 5.1及以后的版本中已被修复。测试验证,在Bash 5.1+环境中,执行echo one |& tee /tmp/file后,运行echo zero !*会正确展开为echo zero one |& tee /tmp/file,无语法错误。
4. Bug提交方式(针对旧版本未修复场景)
若要向Bash官方反馈该问题,可通过以下途径:
- 发送邮件至官方邮件列表:
bug-bash@gnu.org,邮件需包含:bash --version的完整输出- 可复现问题的详细步骤
- 预期行为与实际错误输出的对比
- GNU Bugzilla平台:不过Bash社区主要通过邮件列表处理Bug,邮件方式更直接有效。
内容的提问来源于stack exchange,提问作者W Dean Stanton
相关产品推荐
相关产品推荐

