我有 2 个小函数可以缩写set -x
/ set +x
,即:
sx () {
export PS4='+ [${BASH_SOURCE##*/}:${LINENO}]'
set -x
}
和
sz () {
set +x
export PS4=
}
这 2 个函数位于一个文件中,该文件functons.sh
是source d from ,并且可以在此处~/.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.sh
,但在那一行有一个不同的函数,zzz()
,在线here。
该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
函数的错误结果?
您还有一个
functons.sh
与其他文件中的函数同名的别名。在
functons.sh
:在
z.sh
:这让人困惑
bash
。例子:
没有
xfoo
别名f1
:该
bash
手册还包括文本在“BUGS”标题下。