2013-10-19 12 views
6

यूनिक्स (टीसीएसएच) में, मैंने दो अलग-अलग नोटेशन - $1 और \!:1 के साथ मेरे उपनामों में कमांड लाइन तर्कों का संदर्भ दिया है।

लेकिन मैंने देखा कि यदि मैं $1 को पर्यावरण चर में सहेजने का प्रयास करता हूं, तो यह सहेजा नहीं जाता है। हालांकि \!:1 बचाया जाता है।

alias hear 'setenv x \!:1 && echo $x' 
--> hear that 
that 
--> echo $x 
that 

alias oh 'setenv x $1 && echo $x' 
--> oh no 
no 
--> echo $x 

मूल्य को स्टोर करने के लिए $ 1 का उपयोग करने के लिए $ 1 की गूंज पर कुछ भी नहीं दिखाया जाता है। इसका कारण क्या है?

उत्तर

14

$1 स्क्रिप्ट कि alias आदेश शामिल करने के लिए पारित कर दिया पहला तर्क देता है। तो यदि आप इसे कमांड लाइन से कॉल कर रहे हैं, तो यह कुछ भी वापस नहीं करेगा।

\!:1 एलियाज्ड कमांड पर पारित पहला तर्क देता है, तो यह स्पष्ट रूप से आपको उपयोग करना चाहिए।

5

सुपरग्रा ने प्राथमिक बिंदु का उत्तर दिया है, लेकिन यह आपको आश्चर्यचकित कर सकता है कि क्यों आप अपना पाठ वापस प्रतिबिंबित करते हैं, भले ही चर सेट नहीं किया गया हो। यही है, आपके पास अपने उपनाम के अंत में echo $x है, और वास्तव में आप no देखते हैं जब आप oh no दर्ज करते हैं, लेकिन इसका मतलब यह नहीं है कि इको चर को प्रतिबिंबित कर रहा है।

वहाँ क्या हो रहा है कि echo (खाली) चर प्रिंट कर रहा है, लेकिन फिर भी echo "नहीं" भाग अलग बढ़ रहा है है। यदि आप alias tmp 'echo $1' करते हैं और tmp hi आज़माएं तो आप "हाय" प्रिंट करेंगे क्योंकि ऐसा लगता है कि आपने "$ 1 hi echo" किया था।

इसे और अधिक स्पष्ट रूप से देखने के लिए, alias tmp 'echo abc $1 def ' आज़माएं औरफिर से करें, और आप "abc def hi" प्रिंट करेंगे। दोबारा, यदि आप alias tmp 'echo $1 & which ' आज़माएं और इसे फिर से उपयोग करें, तब तक जब तक आपके पास hi नामक कमांड नहीं है, तो "हाय: कमांड नहीं मिला" जैसे कुछ देखें। या यदि आप tmp ls करते हैं तो आपको which ls का आउटपुट दिखाई देगा।

एक और उदाहरण: देखने के लिए कि यह वास्तव में hi निष्पादित करने के लिए जैसे कि यह एक आदेश है, जो खतरनाक है, तो आपको लगता है कि अपेक्षा नहीं थी, हो सकता है की कोशिश करता है थे कोशिश alias tmp 'echo $1 & ' और tmp hi

+0

आश्चर्यजनक रूप से पर्याप्त, स्वीकार्य उत्तर पढ़ने के बाद मेरे पास यह प्रश्न था। –

संबंधित मुद्दे