Ctrl-Alt-E bash
girişinin yalnızca takma adları genişletmediğini unutmayın. Ayrıca değişkenleri genişletir, komut değiştirme (!), İşlem değiştirme (!), Aritmetik genişletme ve tırnak işaretlerini kaldırır (dosya adı oluşturma (globbing) veya tilde genişletme yapmaz).
Takma adları genişletmek her zaman başaramaz. Bu yüzden kullanımları olmasına rağmen, sonucunun potansiyel olarak komut satırının anlamını değiştirdiğini, yan etkilere sahip olduğunu ve potansiyel olarak tehlikeli olduğunu fark etmek önemlidir.
Örneğin:
$ a=';w' b=1
$ alias foo=bar
$ b=2; echo $b $a; cd /tmp/dir && for i do foo $(pwd) <(ls); done
Eğer M-C-E
buraya basarsam, bu bana şunu verir:
$ b=2; echo 1 ;w; cd /tmp/dir && for i do foo / /dev/fd/63; done
Bu da bana tamamen farklı bir komut satırı verir (ve olsaydı neler olurdu hayal rm -rf *
yerine pwd
yukarıda) ve genişletmek değil foo
diğer adı.
İle zsh
, fonksiyonlar içinde genişletilen diğer adları ile ilgili Gilles' not oluşturmak için, bunu yapabilirsiniz:
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
Bu, takma adları yalnızca geçerli komut satırı sözdizimsel olarak geçerli olduğunda genişletir (böylece sözdizimi denetleyicisi olarak iki katına çıkar).
MCE'nin aksine bash
, takma adları da tamamen çözer. Örneğin:
$ alias ll='ls -l'; alias ls='ls --color'
$ ll
Genişletilecek:
$ ls --color -l
Ayrıca sözdizimini standartlaştırdığına dikkat edin:
$ for i (*) cmd $i; foo
olarak değiştirilecek:
$ for i in *
do
cmd $i
done
foo
C-x a
imlecin altındaki diğer adı genişletir (tamamlama sistemini kullandığınızı varsayarsak).