考虑:

#!/bin/bash

echo
'$ LINENO
echo '''
'$ LINENO

第一个回显正确打印为4,但是第二个回显打印为5而不是6。我是否缺少某些东西,或者这是一个错误? (使用bash 3.00.15)

最佳答案

它看起来像是bash中的一个实现不当的功能(错误)。

我用了:

#!/bin/bash -p
echo $LINENO
echo ' ' $LINENO '
' $LINENO '
' $LINENO
echo '' '
'  $LINENO

产生了:
2
  3
 3
 3

 6

这支持在 shell 认为线已完成之前对变量进行求值的理论。该行完成后,将更新LINENO并继续。

测试的Bash版本:3.2.48(mac),4.1.5(linux)

当我使用语法时:
echo '
' $LINENO

它获取较新的行号。它似乎与对作为唯一参数的空字符串的评估有关。

09-26 07:02