एक अंतर यह है कि पाइप के बजाय कमांड प्रतिस्थापन का उपयोग करते समय, पास किए गए डेटा का आकार कमांड बफर के आकार तक सीमित है, इसलिए इसे कुछ मामलों में बिना चेतावनी के काट दिया जाता है। इसका मतलब यह भी है कि पूरे कमांड आउटपुट का उत्पादन किया जाना चाहिए, और मेमोरी में संग्रहीत किया जाना चाहिए, इससे पहले कि यह अगले कमांड को पास हो जाए, इसलिए बड़े आउटपुट के लिए आप आवश्यकता से अधिक मेमोरी का उपयोग कर सकते हैं।
पहली विधि के साथ एक और मुद्दा यह है कि आउटपुट व्हॉट्सएप पर विभाजित है, इसलिए आप उन स्थानों के साथ फ़ाइल नाम नहीं संभाल सकते। xargs
व्हाट्सएप समस्या से भी प्रभावित है, लेकिन इसका उपयोग परिसीमन को बदलकर किया जा सकता है। ठीक तरह से फाइलनाम को संभालने के लिए, आपको दूसरे उदाहरण में एक सीमांकक के रूप में नल बाइट का उपयोग करने की आवश्यकता होगी।
एक तीसरा मुद्दा यह है कि ग्लब्स का विस्तार किया जाता है, इसलिए यदि किसी फ़ाइल के नाम में तारांकन चिह्न या प्रश्न चिह्न हैं, तो अप्रत्याशित परिणाम होंगे।
आप इस मुद्दे पर एक अच्छी चर्चा पा सकते हैं: http://mywiki.wooledge.org/ParsingLs
सही सिंटैक्स होगा
echo rm *
या यदि आप xargs का उपयोग करना चाहिए,
find . -maxdepth 1 -print0 | xargs -0 echo rm
echo
आउटपुट सही लगने पर निकालें ।
xargs
पाइप के कारण भी एक सब-रन में चलता है, जब तक आप सक्षम नहीं करते हैंshopt -s lastpipe
, इस स्थिति में यह चालू शेल में चलेगा। मुझे नहीं लगता कि इस मामले में हालांकि, सब-रनिंग एक समस्या है, क्योंकि आप किसी भी चर को नहीं बदल रहे हैं।