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

bash中多行管道命令后LINENO为何出现不一致问题?

Bash 5.1.0中DEBUG陷阱的$LINENO行号异常问题

在Bash 5.1.0环境下执行以下脚本时,$LINENO输出的行号不符合预期:

trap 'echo $LINENO' DEBUG

:
(:) | 
# Add any number of lines here
:
: 

实际返回结果为 3 - 6 - 5,但预期输出应该是 3 - 6 - 7。

触发条件

该问题仅在管道中最后一个命令之前存在至少一个用()创建的子shell时出现。即使最后一个命令跨了任意多行,这些行也不会被计入行号统计。

行为符合预期的脚本变体

  • 无前置子shell(输出 3 - 4 - 6 - 7):

    trap 'echo $LINENO' DEBUG
    
    :
    : | 
    # Add any number of lines here
    :
    :
    
  • 最后一个管道命令与管道符同行(输出 3 - 4 - 5):

    trap 'echo $LINENO' DEBUG
    
    :
    (:) | :
    :
    
  • 子shell仅存在于最后一个管道命令(输出 3 - 4 - 8):

    trap 'echo $LINENO' DEBUG
    
    :
    : | (
    :
    )
    :
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 23:20:33