나는 예를 들었다.https://unix.stackexchange.com/a/383825/674
$ alias foo=bar
$ foo () { blah "$@"; }
$ type -a foo bar
foo is aliased to `bar'
bar is a function
bar ()
{
blah "$@"
}
따라서 별칭을 재정의하는 것은 foo
실제로 alias 명령을 재정의하는 것입니다 bar
. 이는 참조 속성이 있는 변수인 nameref와 같습니다.
다음 예제를 통해 더 많은 실험을 해보았습니다.
왜 별칭을
mya=cat
현실화mya
하거나cat
재정의 하지 않습니까 ?echo
cat
nameref와 같은
mya () { cat test.sh; }
함수 별칭을 재정의하는 이유는 무엇입니까 ?echo
감사해요.
$ alias mya=echo
$ type mya
mya is aliased to `echo'
$ mya abc # mya behaves exactly as echo
abc
$ mya=cat
$ type mya
mya is aliased to `echo'
$ mya test.sh # mya=cat doesn't alias mya to cat
test.sh
$ mya () { cat test.sh; }
$ type mya
mya is aliased to `echo'
$ mya # Redefining mya as a function works, by outputing the content of test.sh
#! /usr/bin/env bash
echo $_
echo $0
$ echo # Redefining mya also redefines the aliased echo, just like a nameref
#! /usr/bin/env bash
echo $_
echo $0
답변1
별칭이 명령의 첫 번째 단어인 경우 확장됩니다. 따라서 다음을 입력할 때:
alias foo=bar
foo () { blah "$@"; }
별칭은 foo
확장되어 마치 입력한 것처럼 처리됩니다.
bar () { blah "$@"; }
입력할 때:
alias mya=echo
mya=cat
명령의 첫 번째 단어는 mya=cat
가 아니라 mya
이므로 별칭이 확장되지 않습니다. =
단어 구분 기호가 아니라 변수 할당에서 변수와 값 사이의 구분 기호일 뿐입니다.