एक कमांड में $ () क्या है?


18

$()लिनक्स शेल कमांड्स में क्या है ?

उदाहरण के लिए:

chmod 777 $(pwd)

1
ध्यान दें कि लाइन शेल कमांड जैसी कोई चीज नहीं है । लिनक्स के लिए कई शेल एप्लिकेशन उपलब्ध हैं।
स्टीफन चेज़लस

जवाबों:


21

यह बैकटिक्स `` के समान है।

इसे कमांड प्रतिस्थापन ( पॉज़िक्स स्पेसिफिकेशन ) कहा जाता है और यह एक सब-सब्सक्रिप्शन को आमंत्रित करता है। $()बैकटिक्स (``) के ब्रेसिज़ या बीयून में कमांड को एक सबशेल में निष्पादित किया जाता है और फिर आउटपुट को मूल कमांड में रखा जाता है।

बैकटिक्स के विपरीत, $(...)फॉर्म को नेस्टेड किया जा सकता है। तो आप दूसरे प्रतिस्थापन के अंदर कमांड प्रतिस्थापन का उपयोग कर सकते हैं।

प्रतिस्थापन के भीतर पात्रों से बचने में एसो मतभेद हैं। मुझे $(...)फॉर्म पसंद है ।


4
backticks के रूप में अच्छी तरह से नेस्टेड किया जा सकता है। ध्यान दें कि अनुवर्ती newline वर्ण कमांड के आउटपुट से हटा दिए जाते हैं।
स्टीफन चेजलस

2
@ स्टीफनचेलजैस बैकस्टिक्स को कैसे नेस्टेड किया जा सकता है? आपका मतलब है एक्सेसेसेव से बचकर?
अराजकता

3
हां: जैसेecho `echo \`echo foo\`` bar
स्टीफन चेज़लस

1
किसी भी आधिकारिक संदर्भ में कहा गया है कि बैकटिक्स को हटा दिया गया है?
vinc17

1
यह उत्तर मिला: unix.stackexchange.com/questions/126927/… लगता है कि वे पदावनत नहीं हैं। मेरे जवाब को बदल दिया, धन्यवाद
अराजकता

5

POSIX या में POSIX की तरह गोले ( ksh, bash, ash, zsh, yash...), यह की तरह है ``आदेश के अंदर: $()मार डाला और उसके मानक आउटपुट से बदल दिया है। शब्द-विभाजन और फ़ाइल नाम का निर्माण तब तक किया जाता है जब तक $()कि डबल-कोट्स के अंदर न हो । इस प्रकार

chmod 777 $(pwd)

के साथ प्रतिस्थापित किया जाना चाहिए:

chmod 777 "$(pwd)"

वर्तमान कार्य निर्देशिका पथ पर शब्द-विभाजन और फ़ाइल नाम से बचने के लिए।

या इससे भी बेहतर (कुछ गोले को छोड़कर, जैसे zsh, निर्देशिका नाम बदल दिया गया है):

chmod 777 "$PWD"

चूँकि $PWDएक विशेष चर है जो POSIX गोले में वर्तमान कार्य निर्देशिका के लिए मार्ग रखता है।

या इससे भी बेहतर:

chmod 777 .

चूंकि .वर्तमान निर्देशिका में प्रविष्टि उस निर्देशिका की कड़ी है।


2

यह $()ज्यादातर किसी अन्य कमांड के अंदर एक कमांड निष्पादित करने के लिए उपयोग किया जाता है।

chmod 777 $(pwd)

pwdकमांड करंट वर्किंग डायरेक्टरी देता है। इसलिए, जब पूरी चीज़ को pwd का आउटपुट निष्पादित किया जाता है, तो वह अपनी स्थिति को बदल देगा और तर्क के रूप में कार्य करेगा chmod, और इसका परिणाम यह है कि आपके सभी वर्तमान वर्किंग डायरेक्टरी को अनुमति मिलती है 777जो मुझे लगता है कि उत्पादन वातावरण में कभी भी उपयोग नहीं किया जाना चाहिए;)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.