नए संस्करण चर में हैं। के आउटपुट के LS=$(ls -1)लिए चर सेट करता है (जो उसी तरह का आउटपुट उत्पन्न करता है, जिस तरह से, जब आउटपुट किसी टर्मिनल पर जाता है) को छोड़कर, शून्य से अनुगामी।LSls -1ls
समस्या यह है कि जब आप मूल्य का प्रिंट निकालते हैं तो आप नई कड़ियों को हटा देते हैं। शेल स्क्रिप्ट में, $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तो स्पेस पर अलग-अलग बंटवारा करेंगे।