ध्यान दें कि Ctrl-Alt-E bash
केवल उपनाम का विस्तार नहीं करता है। यह चर, कमांड प्रतिस्थापन (!), प्रक्रिया प्रतिस्थापन (!), अंकगणित का विस्तार करता है और उद्धरणों को निकालता है (यह फ़ाइल नाम पीढ़ी (ग्लोबिंग) या टिल्ड विस्तार नहीं करता है)।
यह हमेशा उपनामों का विस्तार करने का प्रबंधन नहीं करता है। इसलिए जब इसका उपयोग होता है, तो इसके परिणाम का एहसास करना महत्वपूर्ण है, संभावित रूप से कमांड लाइन का अर्थ बदल जाता है, इसके साइड इफेक्ट होते हैं और संभावित रूप से खतरनाक होता है।
उदाहरण के लिए:
$ a=';w' b=1
$ alias foo=bar
$ b=2; echo $b $a; cd /tmp/dir && for i do foo $(pwd) <(ls); done
अगर मैं M-C-E
यहाँ दबाता हूँ , तो यह मुझे देता है:
$ b=2; echo 1 ;w; cd /tmp/dir && for i do foo / /dev/fd/63; done
जो मुझे पूरी तरह से एक अलग कमांड लाइन देता है (और कल्पना करें कि ऊपर के rm -rf *
बजाय अगर मेरे पास होता तो क्या होता pwd
) और इसका विस्तार नहीं करताfoo
उपनाम का ।
साथ zsh
, कार्यों के अंदर का विस्तार उपनाम पर गाइल्स 'नोट पर निर्माण करने के लिए, आप कर सकता है:
expand-aliases() {
unset 'functions[_expand-aliases]'
functions[_expand-aliases]=$BUFFER
(($+functions[_expand-aliases])) &&
BUFFER=${functions[_expand-aliases]#$'\t'} &&
CURSOR=$#BUFFER
}
zle -N expand-aliases
bindkey '\e^E' expand-aliases
यह उपनाम तब ही विस्तारित होगा जब वर्तमान कमांड लाइन वाक्यविन्यास रूप से मान्य हो (इसलिए यह सिंटैक्स चेकर के रूप में दोगुना हो जाता है)।
bash
MCE के विपरीत , यह भी पूरी तरह से उपनाम हल करता है। उदाहरण के लिए यदि आपके पास:
$ alias ll='ls -l'; alias ls='ls --color'
$ ll
इसका विस्तार किया जाएगा:
$ ls --color -l
ध्यान दें कि यह वाक्यविन्यास को भी विहित करता है, जैसे:
$ for i (*) cmd $i; foo
इसे बदल दिया जाएगा:
$ for i in *
do
cmd $i
done
foo
C-x a
कर्सर के तहत उपनाम का विस्तार करता है (यह मानते हुए कि आप पूर्ण प्रणाली का उपयोग कर रहे हैं)।