नए संस्करण चर में हैं। के आउटपुट के LS=$(ls -1)
लिए चर सेट करता है (जो उसी तरह का आउटपुट उत्पन्न करता है, जिस तरह से, जब आउटपुट किसी टर्मिनल पर जाता है) को छोड़कर, शून्य से अनुगामी।LS
ls -1
ls
समस्या यह है कि जब आप मूल्य का प्रिंट निकालते हैं तो आप नई कड़ियों को हटा देते हैं। शेल स्क्रिप्ट में, $LS
"वैरिएबल का मान" नहीं है LS
, इसका मतलब है "मान लें LS
, इसे शब्दों में विभाजित करें IFS
और प्रत्येक शब्द को एक ग्लोब पैटर्न के रूप में व्याख्या करें"। का मान प्राप्त करने के लिए LS
, आप लिखने की जरूरत है "$LS"
और आम तौर पर डाल करने के लिए, या $LS
दोहरे उद्धरण चिह्नों के बीच।
echo "$LS"
के मूल्य को प्रिंट करता है LS
, कुछ गोले को छोड़कर जो बैकस्लैश वर्णों की व्याख्या करता है, और कुछ मूल्यों को छोड़कर जो इसके साथ शुरू होते हैं -
।
printf "$LS"
LS
जब तक इसका कोई प्रतिशत या बैकलैश कैरेक्टर नहीं होता है, तब तक वैल्यू प्रिंट करता है और (ज्यादातर इम्प्लीमेंटेशन के साथ) शुरू नहीं होता है -
।
LS
वास्तव में मूल्य प्रिंट करने के लिए , का उपयोग करें printf %s "$LS"
। यदि आप अंत में एक नई रूपरेखा चाहते हैं, तो उपयोग करें printf '%s\n' "$LS"
।
ध्यान दें कि $(ls)
सामान्य रूप से, वर्तमान निर्देशिका में फ़ाइलों की सूची नहीं है। यह केवल तब काम करता है जब आपके पास पर्याप्त रूप से फ़ाइल नाम हैं। फ़ाइल नामों की सूची प्राप्त करने के लिए (डॉट फ़ाइलों को छोड़कर), आपको वाइल्डकार्ड का उपयोग करने की आवश्यकता है *
:। परिणाम स्ट्रिंग की एक सूची है, न कि एक स्ट्रिंग, इसलिए आप इसे स्ट्रिंग चर को निर्दिष्ट नहीं कर सकते हैं; आप files=(*)
गोले में एक सरणी चर का उपयोग कर सकते हैं जो उनका समर्थन करता है (ksh93, bash, zsh)।
अधिक जानकारी के लिए, देखें कि मेरी शेल स्क्रिप्ट व्हॉट्सएप या अन्य विशेष पात्रों पर क्यों चोक करती है?
printf "%s\n" $LS
तो स्पेस पर अलग-अलग बंटवारा करेंगे।