bash - जब हम डॉलर के हस्ताक्षर और कोष्ठक के अंदर एक कमांड डालते हैं तो खोल में इसका क्या अर्थ है: $(कमांड)




shell terminal (2)

मैं सिर्फ खोल में कोड की निम्नलिखित पंक्ति को समझना चाहता हूं। इसका उपयोग वर्तमान कार्यशील निर्देशिका प्राप्त करने के लिए किया जाता है। मुझे पता है कि $(variable) नाम वैरिएबल नाम के अंदर मान वापस कर देता है, लेकिन $(command) वापस लौटने वाला क्या है? क्या यह आदेश निष्पादित करने के बाद मान वापस करता है? उस स्थिति में, हम आदेश को निष्पादित करने के लिए ` का उपयोग कर सकते हैं।

CWD="$(cd "$(dirname $0)"; pwd)"

शैल के विभिन्न संस्करणों में भी कोड की निम्न पंक्ति से वही आउटपुट लिया जा सकता है

DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

मैं $(cd.. और $(dirname के अर्थ को समझने में असमर्थ हूं।

क्या कोई यह जानने में मेरी सहायता कर सकता है कि यह आदेश कैसे निष्पादित किया जाता है?


${HOME} तरह ${HOME} का उपयोग ${HOME} का मूल्य देता है। $ $(echo foo) अर्थ है सबकुछ में ब्रांड्स के अंदर जो कुछ भी है, उसे चलाएं और उसे मान के रूप में वापस कर दें। मेरे उदाहरण में, आप foo प्राप्त करेंगे क्योंकि echo मानक आउट करने के लिए foo लिखेंगे


DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

Could anybody help me to figure out how this command get executed?

आइए कमांड के विभिन्न हिस्सों को देखें। BASH_SOURCE एक बैश सरणी चर है जिसमें स्रोत फ़ाइल नाम हैं। तो "${BASH_SOURCE[0]}" आपको स्क्रिप्ट फ़ाइल का नाम वापस कर देगा।

dirname जीएनयू कोर्यूटिल्स द्वारा प्रदान की जाने वाली एक उपयोगिता है जो फ़ाइल नाम से अंतिम घटक को हटाती है। इस प्रकार यदि आप bash foo कहकर अपनी स्क्रिप्ट निष्पादित करते हैं, "$( dirname "${BASH_SOURCE[0]}" )" वापस आ जाएगा . । यदि आपने कहा bash ../foo , यह वापस आ जाएगा .. ; bash /some/path/foo यह /some/path वापस आ जाएगा।

अंत में, संपूर्ण आदेश "$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" स्क्रिप्ट को शामिल करने वाली पूर्ण निर्देशिका प्राप्त होती है।

$(...) कमांड प्रतिस्थापन की अनुमति देता है, यानी कमांड को आउटपुट को कमांड को प्रतिस्थापित करने की अनुमति देता है और इसे नेस्टेड किया जा सकता है।







ksh