-F文が無効なファイルを提供する理由

-F文が無効なファイルを提供する理由

set -x/を短くしたい2つの小さな関数がありますset +x

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

そして

sz () {
    set +x
    export PS4=
}

これら2つの機能は1つのファイルにあります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」というタイトルの下にあります。

おすすめ記事