कमांड प्रतिस्थापन एक कमांड के आउटपुट को कमांड नाम के स्थान पर प्रतिस्थापित करने की अनुमति देता है। कमांड प्रतिस्थापन तब होता है जब कमांड निम्नानुसार संलग्न है:
$(command)
या (backquoted संस्करण):
`command`
खोल क्रियान्वित करते हुए आदेश प्रतिस्थापन का विस्तार करेगा आदेश
एक subshell वातावरण में (देखें शैल निष्पादन पर्यावरण और आदेश प्रतिस्थापन (के पाठ की जगह) आदेश आदेश के मानक उत्पादन के साथ साथ साथ संलग्न "$ ()" या backquotes), को हटाने <newline>
प्रतिस्थापन के अंत में एक या एक से अधिक वर्णों का क्रम । <newline>
आउटपुट के अंत से पहले एंबेडेड वर्णों को हटाया नहीं जाएगा; हालाँकि, उन्हें क्षेत्र के सीमांकक के रूप में माना जा सकता है और क्षेत्र विभाजन के दौरान समाप्त किया जा सकता है, जो कि IFS के मूल्य पर निर्भर करता है और जो प्रभाव में है। यदि आउटपुट में कोई नल बाइट्स है, तो व्यवहार अनिर्दिष्ट है।
आदेश प्रतिस्थापन के पीछे की शैली के भीतर, <backslash>
इसके शाब्दिक अर्थ को बनाए रखेगा, इसके बाद जब: ' $
', ' `
', या
<backslash>
। मिलान किए गए बैककौट की खोज पहले गैर-बच गए बैककौट से संतुष्ट होगी; इस खोज के दौरान, यदि एक गैर-बच गए बैककॉट का शेल टिप्पणी के भीतर सामना किया जाता है, तो यहां एक दस्तावेज, $ ( कमांड ) फॉर्म का एक एम्बेडेड कमांड प्रतिस्थापन , या एक उद्धृत स्ट्रिंग, अपरिभाषित परिणाम होते हैं। एक एकल-उद्धृत या डबल-उद्धृत स्ट्रिंग जो शुरू होता है, लेकिन समाप्त नहीं होता है, " `...`
" अनुक्रम के भीतर अपरिभाषित परिणाम पैदा करता है।
$ ( कमांड ) फॉर्म के साथ, ओपन कोष्ठक के मिलान समापन कोष्ठक के बाद सभी वर्ण कमांड का गठन करते हैं
। किसी भी मान्य शेल स्क्रिप्ट का उपयोग कमांड के लिए किया जा सकता है , केवल एक स्क्रिप्ट को छोड़कर जिसमें अप्रत्यक्ष परिणाम होते हैं।
आदेश प्रतिस्थापन के परिणामों को आगे के टिल्ड विस्तार, पैरामीटर विस्तार, कमांड प्रतिस्थापन या अंकगणितीय विस्तार के लिए संसाधित नहीं किया जाएगा। यदि कोई कमांड प्रतिस्थापन डबल-कोट्स के अंदर होता है, तो प्रतिस्थापन के परिणाम पर फ़ील्ड विभाजन और पाथनेम विस्तार नहीं किया जाएगा।
कमांड प्रतिस्थापन को नस्ट किया जा सकता है। बैककोट संस्करण के भीतर घोंसले के शिकार को निर्दिष्ट करने के लिए, आवेदन <backslash>
पात्रों के साथ आंतरिक बैकक्वाटर से पहले होगा ; उदाहरण के लिए:
\`command\`
शेल कमांड लैंग्वेज के सिंटैक्स में "के साथ शुरू होने वाले विस्तार के लिए एक अस्पष्टता है"$((
", जो एक अंकगणित के विस्तार या एक कमांड प्रतिस्थापन की शुरुआत कर सकता है जो एक उपधारा के साथ शुरू होता है। अंकगणितीय विस्तार पूर्वता है; अर्थात, शेल पहले यह निर्धारित करेगा कि क्या यह एक अंकगणितीय विस्तार के रूप में विस्तार को पार्स कर सकता है और केवल कमांड के रूप में विस्तार को पार्स करेगा। प्रतिस्थापन यदि यह निर्धारित करता है कि यह विस्तार को एक अंकगणितीय विस्तार के रूप में परिभाषित नहीं कर सकता है। इस निर्धारण को करते समय शेल को नेस्टेड विस्तार का मूल्यांकन करने की आवश्यकता नहीं है। यदि यह पहले से निर्धारित किए बिना इनपुट के अंत का सामना करता है कि यह विस्तार को अंकगणितीय विस्तार के रूप में पार्स नहीं कर सकता है। शेल विस्तार को अपूर्ण अंकगणितीय विस्तार के रूप में मानता है और एक सिंटैक्स त्रुटि की रिपोर्ट करेगा। एक अनुरूपण आवेदन यह सुनिश्चित करेगा कि यह " $(
" और '' को अलग करता है ।(
'दो टोकन में (जो उन्हें सफेद स्थान के साथ अलग करता है) एक कमांड प्रतिस्थापन में जो एक सबशेल से शुरू होता है। उदाहरण के लिए, एकल उपसमूह वाले एक कमांड प्रतिस्थापन को इस प्रकार लिखा जा सकता है:
$( (command) )
$()
POSIX है और सभी आधुनिक बॉर्न शेल द्वारा समर्थित है, जैसे ksh, bash, ash, dash, zsh, busybox, आप इसे नाम देते हैं। (ऐसा नहीं है कि एक आधुनिक सोलारिस है/bin/sh
, लेकिन सोलारिस पर आप/usr/xpg4/bin/sh
इसके बजाय आधुनिक का उपयोग करना सुनिश्चित करेंगे )।