মনে রাখবেন যে 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এর এমসিই এর বিপরীতে , এটি এলিয়াসগুলি পুরোপুরি সমাধান করে। উদাহরণস্বরূপ যদি আপনার কাছে থাকে:
$ 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কার্সারের অধীনে উপন্যাসটি প্রসারিত করে (ধরে নিবেন আপনি সমাপ্তি সিস্টেমটি ব্যবহার করছেন)।