首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么LINENO在多行管道命令之后不一致?

为什么LINENO在多行管道命令之后不一致?
EN

Stack Overflow用户
提问于 2022-09-06 16:58:21
回答 1查看 58关注 0票数 1

使用bash (5.1.0)执行以下脚本时生成的行号是意外的:

代码语言:javascript
复制
trap 'echo $LINENO' DEBUG

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

这将返回3-6-5,而我希望得到3-6-7。

只有当管道在最后一个命令之前包含至少一个子shell(用( )创建)时,才会出现此问题。

最后一个命令可以跨越任意数量的行,但没有考虑到它们。

脚本的下列变体按预期运行

  • No .子壳(3-4-6-7):

陷阱'echo $LINENO‘调试::AC.26#在这里添加任意数量的行::

  • 上一条管道命令停留在同一行(3-4-5)上:

陷阱'echo $LINENO‘调试:(:) \x{e76f} :

仅在最后一个管道命令(3-4-8)上使用

  • 子shell:

陷阱'echo $LINENO‘调试::AC.26(:) :

EN

回答 1

Stack Overflow用户

发布于 2022-09-22 12:26:49

在@Barmar的有趣评论之后,我使用了bash的几个版本进行了测试。通过对4.4.2 35.0.0的二分法,可以发现4.4.2 35.0之间的行为变化

代码语言:javascript
复制
$ docker run -it -v "$(pwd)/test.sh":/tmp/test.sh bash:4.4.23 bash /tmp/test.sh
3
6
7
$ docker run -it -v "$(pwd)/test.sh":/tmp/test.sh bash:5.0.0 bash /tmp/test.sh
3
6
5

这已被报告为bash列表中的一个问题:https://savannah.gnu.org/support/?110714

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73625481

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档