आप
echo "$lines"
echo $lines
के बजाय कहने के लिए विस्तार करने के लिए करना चाहते हैं:
echo $lines
का अर्थ है "lines
नामित चर की सामग्री के साथ $lines
की जगह एक नया आदेश फार्म, echo
कमांड के लिए शून्य या अधिक नए तर्क बनाने के लिए इसे व्हाइटस्पेस पर विभाजित करें। परीक्षा के लिए मिसाल:
lines='1 2 3'
echo $lines # equivalent to "echo 1 2 3"
lines='1 2 3'
echo $lines # also equivalent to "echo 1 2 3"
lines="1
2
3"
echo $lines # also equivalent to "echo 1 2 3"
सभी इन उदाहरणों, बराबर हैं क्योंकि खोल व्यक्ति चर lines
में संग्रहीत शब्दों के बीच खाली स्थान के एक विशिष्ट प्रकार की उपेक्षा करता है। असल में, अधिक सटीक होने के लिए, खोल विशेष IFS
(आंतरिक फ़ील्ड सेपरेटर) चर के पात्रों पर परिवर्तनीय की सामग्री को विभाजित करता है, जो डिफ़ॉल्ट रूप से (बैश के मेरे संस्करण पर) तीन अक्षरों की जगह, टैब और न्यूलाइन पर डिफ़ॉल्ट रूप से विभाजित होता है ।
echo "$lines"
, दूसरी तरफ, वेरिएबल lines
के सटीक मान से एक नया तर्क बनाने का मतलब है।
अधिक जानकारी के लिए, बैश मैन्युअल पृष्ठ के "विस्तार" और "शब्द विभाजन" अनुभाग देखें।
बिल्ली के समान दुरुपयोग: 'लाइनों = $ (ग्रेप हैलो abc.txt)' । –
यह भी देखें http://stackoverflow.com/questions/613572/capturing-multiple-line-output-to-a-bash-variable/ –