-F 선언이 잘못된 파일을 제공하는 이유는 무엇입니까?

-F 선언이 잘못된 파일을 제공하는 이유는 무엇입니까?

set -x/ 를 축약하는 2개의 작은 함수가 있습니다. set +x즉:

sx () {
    export PS4='+ [${BASH_SOURCE##*/}:${LINENO}]'
    set -x
}

그리고

sz () {
    set +x
    export PS4=
}

functons.sh이 두 가지 기능은 다음 파일에 있습니다 .원천d 의 ~/.bashrc, 온라인에서 볼 수 있음여기.

새 bash 세션에 로그인한 후 즉시 함수가 다음과 같은 위치를 찾으려고 합니다 sz().

$ shopt -s extdebug; declare -F sz; shopt -u extdebug
sz 25 /Users/jab/src/git/hub/jab/src/bash/keyboard/z.sh

이는 함수가 에 선언되어 있다고 bash생각 하지만 해당 줄에는 온라인이라는 다른 함수가 있음을 보여줍니다.sz()z.shzzz()여기.

sx()함수(및 기타 모든 함수) 의 결과 가 정확합니다.

$ shopt -s extdebug; declare -F sx; shopt -u extdebug
sx 428 /Users/jab/src/git/hub/jab3/src/bash/functons.sh

declare -F명령이 함수에 대해 잘못된 결과를 얻는 이유는 무엇입니까 sz?

답변1

functons.sh또한 다른 파일의 함수와 동일한 이름을 가진 별칭이 있습니다 .

안에 functons.sh:

alias zzz=sz

안에 z.sh:

zzz () {
    df -h
}

이것은 혼란스럽다 bash.

예:

$ cat f1
foo () { echo hello; }
alias xfoo=foo

$ cat f2
xfoo () { echo beep; }

$ source f1
$ source f2
$ shopt -s extdebug
$ declare -F foo
foo 1 f2

별칭이 없는 xfoo경우 f1:

$ source f1
$ source f2
$ shopt -s extdebug
$ declare -F foo
foo 1 f1

설명서 bash에는 텍스트도 포함되어 있습니다.

별칭은 일부 용도에서 혼란을 줍니다.

"BUGS" 제목 아래에 있습니다.

관련 정보