पहला मामला:
echo $'$foo'
कौन सा इकोस $foo
(मतलब $
मेरी इको कमांड में पहला गिरा है)
पहले $
कमांड के रूप में चलाया जाता है। इको को तर्कों के बीच रिक्त स्थान की आवश्यकता नहीं है, यह सिर्फ उन्हें लेता है।
तो इको $'$foo'
कमांड चलाने के लिए फैलता है $
(जो कमांड नहीं है इसलिए इसे अनदेखा करता है) और फिर इको '$foo'
। किसी भी चीज़ ''
को अंकित मूल्य पर लिया जाता है - यह इसका विस्तार या कुछ भी नहीं करता है। आप जो चाहते हैं उसे '' में रख सकते हैं और कुछ नहीं होता।
यदि आप इसके $
साथ बदल देते हैं $$
तो प्रक्रिया आईडी को इको कर दिया जाता है।
दूसरा:
echo $"$foo"
यह इकोस pwd
(जिसका अर्थ है बैश का विस्तार $foo
, मेरा चर, इसके मूल्य तक)
ऐसा इसलिए ""
है क्योंकि यह विस्तार करने से नहीं रोकता है। ""
सामान्य रूप से यह सुनिश्चित करने के लिए उपयोग किया जाता है कि तुलना करने के लिए एक मूल्य है।
यदि आपके पास एक चर है जो खाली हो सकता है (जैसे यह एक grep
परिणाम से है) तो आप दूसरे मूल्य / चर की तुलना करना चाहते हैं, आपको पहला चर अंदर लाना होगा ""
। यह सुनिश्चित करता है कि कोड के एक खाली खंड (बैश देखता है) के बजाय हमेशा जांच करने की तुलना होती है, जो एक त्रुटि देता है।
अंत में, संख्या 3. यह दिलचस्प है।
echo $`$foo`
यह इकोस $~/scripts
(मुझे उम्मीद है कि यह प्रिंट होगा ~/scripts
और नहीं $~/scripts
)
ऐसा इसलिए है क्योंकि (इस मामले में) गूंज $
पहले चरित्र को छाप रहा है । बैकटिक्स में कुछ डालने से चर के मान को कमांड के रूप में चलाया जा सकता है (बैश के हाल के संस्करणों में इसे करने का बेहतर तरीका है $(command)
)
तो पहले यह इको है $
फिर यह फैलता `$foo`
है `pwd`
जो चलाया जाता है और लौटता है ~/Scripts
। लेकिन हमारे पास $
पहले प्रिंट था - इसलिए संपूर्ण आउटपुट है $~/Scripts
।