2011-06-15 51 views
6

考慮:

 
#!/bin/bash 

echo ' 
' $LINENO 
echo '' ' 
' $LINENO 

第一回聲正常打印4,但第二回聲打印的5而不是6.我失去了一些東西,或者這是一個錯誤? (使用bash 3.00.15)

回答

4

它看起來像bash中的一個實現錯誤(錯誤)。

我用:

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

其產生:

2 
    3 
3 
3 

6 

支持的理論,前殼認爲已完成了行的變量進行評估。一旦線路完成,它將更新LINENO並繼續。

的Bash版本的測試:3.2.48(MAC),4.1.5(Linux)的

當我使用的語法:

echo ' 
' $LINENO 

它獲取更新的行數。這似乎與評估作爲唯一論據的空字符串有關。

+0

zsh中沒有出現有不好的特性... – Petesh 2011-06-15 16:57:21

1

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