함수와 동일한 별칭이 있나요? [폐쇄]

함수와 동일한 별칭이 있나요? [폐쇄]
  1. 별칭이 함수와 동일합니까? 즉, 별칭이 나타날 때마다 함수 이름으로 대체될 수 있고, 함수 이름이 나올 때마다 별칭으로 바뀔 수 있습니까?

  2. 내가 맞다면 임의의 별칭은 다음 형식으로 정의됩니다.

    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 "$@"; }

이제 fooand 를 사용하여 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.

관련 정보