$ के साथ backtick की जगह () काम नहीं कर रहा है


17

मेरे पास कुछ पुरानी स्क्रिप्ट हैं जिन्हें मैं अपडेट करने की कोशिश करता हूं। कुछ कोड के लिए:

 export X=`(echo "abc"; echo "def")`
 echo $X

जो अपेक्षित आउटपुट देता है:

 abc def

अब इंटरनेट मुझे बताता है कि बैकटिक्स बाहर हैं जिन्हें मुझे $()उपयोग करने की आवश्यकता है, लेकिन जब मैं कोशिश करता हूं:

export X=$((echo "abc"; echo "def"))

X सेट नहीं है और मुझे त्रुटि मिलती है:

bash: echo "abc"; echo "def": syntax error: invalid arithmetic operator (error token is ""abc"; echo "def"")

मैं क्या गलत कर रहा हूं?

जवाबों:


27

$(( … ))वाक्य रचना एक है अंकगणितीय अभिव्यक्ति

क्या याद आ रही है , अंकगणित अभिव्यक्ति सिंटैक्स से बचने के लिए $(और निम्नलिखित के बीच एक स्थान है (

शेल कमांड भाषा विनिर्देश में कमांड प्रतिस्थापन पर अनुभाग वास्तव में इसके लिए चेतावनी देता है:

If the command substitution consists of a single subshell, such as:

   $( (command) )

a conforming application shall separate the "`$(`" and '`(`' into two tokens
(that is, separate them with white space). This is required to avoid any
ambiguities with arithmetic expansion.

21
यह ध्यान दिया जाना चाहिए कि `...`और $(...)वैसे भी एक उपखंड शुरू करें, इसलिए आंतरिक की (...)आवश्यकता नहीं है (एक प्रक्रिया को बर्बाद करें)। आपको $( (...); (...) )उदाहरण के लिए चीजों में स्थान की आवश्यकता होगी (जहां आंतरिक उप-भागों की आवश्यकता हो सकती है)।
स्टीफन चेजलस

15

प्रयत्न export X="$(echo "abc"; echo "def")"


धन्यवाद यह काम करता है, लेकिन दूसरे समाधान की तुलना में अधिक संपादन की आवश्यकता होती है।
हेरोल्ड

2
+1 उन POSIX गोले ( kshऔर bashकेवल अपवाद होने के नाते) में आवश्यक उद्धरणों को शामिल करने के लिए ।
स्टीफन चेज़लस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.