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
I를 누르면 M-C-E
여기, 그 날을 제공합니다 :
$ b=2; echo 1 ;w; cd /tmp/dir && for i do foo / /dev/fd/63; done
이것은 완전히 다른 명령 줄을 제공하며 ( 위 rm -rf *
대신 대신 했을 경우 무슨 일이 있었는지 상상해보십시오 pwd
) foo
별칭을 확장하지 않습니다 .
을 사용하면 zsh
함수 내에서 확장 된 별칭에 대한 Gilles의 메모를 작성하기 위해 다음을 수행 할 수 있습니다.
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
커서 아래에 별칭을 확장합니다 (완료 시스템을 사용한다고 가정).