jal*_*anb 6 bash bash-functions
我有两个小函数可以缩写set -x/ set +x,即:
sx () {
export PS4='+ [${BASH_SOURCE##*/}:${LINENO}]'
set -x
}
Run Code Online (Sandbox Code Playgroud)
和
sz () {
set +x
export PS4=
}
Run Code Online (Sandbox Code Playgroud)
这两种功能的文件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
Run Code Online (Sandbox Code Playgroud)
这表明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
Run Code Online (Sandbox Code Playgroud)
为什么declare -F命令会得到错误的sz函数结果?
Kus*_*nda 10
您还有一个functons.sh与其他文件中的函数同名的别名。
在functons.sh:
alias zzz=sz
Run Code Online (Sandbox Code Playgroud)
在z.sh:
zzz () {
df -h
}
Run Code Online (Sandbox Code Playgroud)
这令人困惑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
Run Code Online (Sandbox Code Playgroud)
没有xfoo别名f1:
$ source f1
$ source f2
$ shopt -s extdebug
$ declare -F foo
foo 1 f1
Run Code Online (Sandbox Code Playgroud)
该bash手册还包括文本
别名在某些用途中令人困惑。
在“BUGS”标题下。