2011-06-15 6 views
6

पर विचार करें:

 
#!/bin/bash 

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

पहले गूंज सही ढंग से एक 4 प्रिंट, लेकिन दूसरे गूंज प्रिंट एक 5 6. Am के बजाय मैं कुछ याद आ रही है, या यह एक बग है? (बैश 3.00.15 का उपयोग करना)

उत्तर

4

यह बैश में कार्यान्वयन गलतफहमी (बग) जैसा दिखता है।

मैं प्रयोग किया है:

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

जो झुकेंगे:

2 
    3 
3 
3 

6 

कौन सा सिद्धांत है कि चर से पहले खोल समझता है लाइन के लिए पूरा किया गया है मूल्यांकन किया जाता है का समर्थन करता है। एक बार लाइन पूरी होने के बाद, यह LINENO और आय अपडेट करता है।

बैश संस्करणों का परीक्षण किया: 3.2.48 (मैक), 4.1.5 (लिनक्स)

जब मैं सिंटैक्स का उपयोग करें:

echo ' 
' $LINENO 

यह नये लाइन नंबर हो जाता है। ऐसा लगता है कि रेखा पर एकमात्र तर्क के रूप में खाली खाली स्ट्रिंग के मूल्यांकन से संबंधित है।

+0

zsh misfeature है प्रतीत नहीं होता है ... – Petesh

1

Bashecho आदेश अनुसार बहु-स्ट्रिंग & बहु लाइन तर्क की व्याख्या करने के स्रोत कोड फ़ाइल (स्क्रिप्ट) क्योंकि 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 
संबंधित मुद्दे