पर विचार करें:
#!/bin/bash echo ' ' $LINENO echo '' ' ' $LINENO
पहले गूंज सही ढंग से एक 4 प्रिंट, लेकिन दूसरे गूंज प्रिंट एक 5 6. Am के बजाय मैं कुछ याद आ रही है, या यह एक बग है? (बैश 3.00.15 का उपयोग करना)
पर विचार करें:
#!/bin/bash echo ' ' $LINENO echo '' ' ' $LINENO
पहले गूंज सही ढंग से एक 4 प्रिंट, लेकिन दूसरे गूंज प्रिंट एक 5 6. Am के बजाय मैं कुछ याद आ रही है, या यह एक बग है? (बैश 3.00.15 का उपयोग करना)
यह बैश में कार्यान्वयन गलतफहमी (बग) जैसा दिखता है।
मैं प्रयोग किया है:
#!/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
यह नये लाइन नंबर हो जाता है। ऐसा लगता है कि रेखा पर एकमात्र तर्क के रूप में खाली खाली स्ट्रिंग के मूल्यांकन से संबंधित है।
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
zsh misfeature है प्रतीत नहीं होता है ... – Petesh