/ / bash हिस्ट्री लाइन एडिटिंग कमांड की जगह यहाँ प्रोसेस डॉक्यूमेंट - dash, शेल द्वारा संलग्न डॉक है

बैश इतिहास लाइन संपादन कमांड प्रक्रिया प्रतिस्थापन द्वारा संलग्न दस्तावेज़ के अंदर प्रतिस्थापित - बैश, खोल

मैं प्रक्रिया प्रतिस्थापन अभिव्यक्ति द्वारा संलग्न डॉक्टर के साथ बैश कमांड के नीचे चलना चाहता हूं।

$cat <(cat <<"xx"
1st line
2nd !!
xx
)

लेकिन आउटपुट इस प्रकार है। नतीजा बताता है कि सी-शैल शैली इतिहास लाइन संपादन कमांड !! (अंतिम कमांड) को संबंधित कमांड आउटपुट (यानी अंतिम कमांड) से बदल दिया जाता है और फिर निष्पादित किया जाता है।

$ cat <(cat <<"xx"
> 1st line
> 2nd !!
2nd cat <(cat <<"xx"
1st line
> xx
> )
1st line
2nd cat <(cat <<"xx"
1st line

मेरा सवाल है कि हिस्ट्री लाइन एडिटिंग कमांड क्यों !! heredoc में अंतिम कमांड के साथ प्रतिस्थापित किया जाता है और उदाहरण में निष्पादित किया जाता है?

ध्यान दें कि नीचे के 2 उदाहरणों में, बिल्ट-इन शेल वेरिएंट $$ इंटरपोल्टेड नहीं है, और !! शुद्ध में यहाँ आदेश प्रक्रिया प्रतिस्थापन में संलग्न किए बिना डॉक्टर से प्रक्षेपित नहीं है!

$ cat <(cat <<"xx"
> 1st line
> 2nd $$
> xx
> )
1st line
2nd $$

$ cat <<"xx"
> 1st line
> 2nd !!
> xx
1st line
2nd !!

कृपया मूल कारण पर गहराई से स्पष्टीकरण प्रदान करें। धन्यवाद!

उत्तर:

जवाब के लिए 0 № 1

यहां दस्तावेज़

इस प्रकार का पुनर्निर्देशन शेल को निर्देश देता हैवर्तमान स्रोत से इनपुट पढ़ें जब तक कि केवल सीमांकक (जिसमें कोई पीछे न होने वाले रिक्त स्थान के साथ) दिखाई न दे। उस बिंदु तक पढ़ी गई सभी लाइनें तब कमांड के लिए मानक इनपुट के रूप में उपयोग की जाती हैं।

यहाँ दस्तावेजों का प्रारूप है:

<<[-]word
here-document
delimiter

कोई पैरामीटर और चर विस्तार, कमांड प्रतिस्थापन, अंकगणित विस्तार, या pathname विस्तार शब्द पर किया जाता है। यदि शब्द के किसी भी अक्षर को उद्धृत किया जाता है, तो सीमांकक शब्द पर उद्धरण हटाने का परिणाम है, और यहाँ-दस्तावेज़ में लाइनों का विस्तार नहीं किया गया है। यदि शब्द अयोग्य है, की सभी पंक्तियाँयहाँ दस्तावेज़ को पैरामीटर विस्तार, कमांड प्रतिस्थापन, और अंकगणितीय विस्तार के अधीन किया गया है, चरित्र अनुक्रम को अनदेखा किया गया है, और इसका उपयोग वर्णों, $, और `को उद्धृत करने के लिए किया जाना चाहिए।