在bash脚本中使用if语句中的子shell的$ LINENO行为异常

时间:2019-07-05 22:08:04

标签: bash

在if语句中使用子外壳环境会破坏$ LINENO变量。这是最小的可复制代码:

1. #!/bin/bash
2. if true ; then
3.     (echo dummy)
4. fi
5. echo "Line no:" $LINENO

显示“行号:4”而不是5。 这是正常现象吗?我在网上找不到任何解释。 仅当条件为真(意味着执行了子外壳程序)时,才会出现此问题。如果子外壳程序在while / for循环中至少迭代一次,则会发生相同的问题。

令人惊讶的是,下面的三段代码按预期工作:

a)否if-then-fi

1. #!/bin/bash
2. (echo dummy)
3. echo "Line no:" $LINENO

按预期显示3。

b)没有子外壳

1. #!/bin/bash
2. if true ; then
3.     echo dummy
4. fi
5. echo "Line no:" $LINENO

按预期显示5。

c)嵌套子外壳

1. #!/bin/bash
2. (if true ; then
3.     (echo dummy)
4. fi)
5. echo "Line no:" $LINENO

按预期显示5。

0 个答案:

没有答案