考虑:
#!/bin/bash echo ' ' $LINENO echo '' ' ' $LINENO
第一个回声正确打印4,但第二个回显打印5而不是6.我错过了什么,或者这是一个错误? (使用bash 3.00.15)
答案 0 :(得分:5)
它看起来像bash中的实现错误(bug)。
我用过:
#!/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
它获得较新的行号。它似乎与作为该行唯一参数的空字符串的评估有关。
答案 1 :(得分:2)
Bash
似乎解释了一个多字符串& echo
命令的多行参数仅位于源代码文件(脚本)的一行,因为Bash
必须连接多字符串&将echo
命令的多行参数转换为单个(一行)参数。连接机制也由空字符串''
触发,后跟包含换行符echo -e '' + '\n' + $LINENO
的字符串。
#!/bin/bash
# Bash concatenates a multi-string & multi-line argument ...
echo ' ' $LINENO '
' $LINENO '
' $LINENO
# ... into a one line argument.
echo -e "' ' $LINENO '\n' $LINENO '\n' $LINENO\n"
#!/bin/bash
echo "2
3
4
5
6 LINENO: $LINENO" # 6 LINENO: 6
exit
#!/bin/bash
echo "2" " " "
3
4
5
6 LINENO: $LINENO" # 6 LINENO: 2
# echo -e "2" + " " + "\n3\n4\n5\n6 LINENO: $LINENO"
exit