-F 문이 잘못된 파일을 제공하는 이유

-F 문이 잘못된 파일을 제공하는 이유

set -x/ 를 축약하고 싶은 두 개의 작은 함수가 있습니다 set +x.

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

그리고

sz () {
    set +x
    export PS4=
}

이 두 가지 기능은 하나의 파일에 있습니다 functons.sh.원천d는 에서 왔고 ~/.bashrc온라인에 표시됩니다.여기.

sz()새로운 bash 세션에 로그인한 후 즉시 다음과 같이 함수가 어디에 있는지 알아내려고 했습니다 .

$ 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.sh에 다른 함수가 있음을 나타냅니다.zzz()여기.

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"라는 제목 아래에 있습니다.

관련 정보