使用bash (5.1.0)执行以下脚本时生成的行号是意外的:
trap 'echo $LINENO' DEBUG
:
(:) |
# Add any number of lines here
:
: 这将返回3-6-5,而我希望得到3-6-7。
只有当管道在最后一个命令之前包含至少一个子shell(用( )创建)时,才会出现此问题。
最后一个命令可以跨越任意数量的行,但没有考虑到它们。
脚本的下列变体按预期运行
陷阱'echo $LINENO‘调试::AC.26#在这里添加任意数量的行::
陷阱'echo $LINENO‘调试:(:) \x{e76f} :
仅在最后一个管道命令(3-4-8)上使用
陷阱'echo $LINENO‘调试::AC.26(:) :
发布于 2022-09-22 12:26:49
在@Barmar的有趣评论之后,我使用了bash的几个版本进行了测试。通过对4.4.2 3和5.0.0的二分法,可以发现4.4.2 3和5.0之间的行为变化
$ 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
https://stackoverflow.com/questions/73625481
复制相似问题