별칭이 함수와 동일합니까? 즉, 별칭이 나타날 때마다 함수 이름으로 대체될 수 있고, 함수 이름이 나올 때마다 별칭으로 바뀔 수 있습니까?
내가 맞다면 임의의 별칭은 다음 형식으로 정의됩니다.
alias myalias=blahblah
위의 형식으로 정의된 별칭은 항상 다음과 같이 정의된 함수와 동일합니까?
myfun () { blahblah $@ }
?
그렇지 않은 경우 별칭은 어떤 기능과 동일합니까?
감사해요.
답변1
광택 매뉴얼에서 알 수 있듯이 별칭은 거의 완전히 함수로 대체되었습니다. 함수는 별칭이 수행할 수 있는 거의 모든 작업을 수행할 수 있으며, 순서에 관계없이 사용할 수 있는 인수를 허용하므로 그 이상도 수행할 수 있습니다.
함수가 할 수 없는 일은 인수의 확장을 막는 것입니다. 즉, 별칭을 사용하는 유일한 이유는 확장되지 않는 함수 호출을 설정하기 위한 것입니다.
alias funny='set -f; _funny'
_funny(){ set +f ; do_something_with_unexpanded_args ;}
이제 파일 목록 대신 현재 디렉터리의 파일을 실행 funny *
하고 볼 수 있습니다.*
답변2
다음과 같은 이유로 NO 함수는 항상 주어진 별칭과 동일합니다.
$ alias foo=bar
+ alias foo=bar
$ myfun () { bar "$@"; }
이제 foo
and 를 사용하여 myfun
함수를 정의 해 보겠습니다.
$ foo () { blah "$@"; }
$ myfun () { blah "$@"; }
foo
그리고 무슨 일이 일어날까요 myfun
?
$ type -a foo bar myfun
+ type -a foo bar myfun
foo is aliased to `bar'
bar is a function
bar ()
{
blah "$@"
}
myfun is a function
myfun ()
{
blah "$@"
}
분명히 별칭과 동일하다고 가정되는 함수는 재정의되지만 별칭은 영향을 받지 않습니다.
대부분의 다른 경우에 myfun
해당하는 값은 입니다 foo
.