/ bin / sh中的$ FUNCNAME替代方案

时间:2015-10-18 20:10:03

标签: shell sh

POSIX shell是否与$FUNCNAME中的bash类似?

2 个答案:

答案 0 :(得分:2)

否。 POSIX sh标准is quite small需要具有特殊行为的变量列表,并且没有给出等同于FUNCNAME的变量;最接近的是LINENO

(如果POSIX中已存在这样的事情,为什么bash会添加自己的而不是实现规范?)

答案 1 :(得分:0)

修改 只是注意我是如何测试的,如果有一个变量告诉我当前的功能是什么。最初令人困惑的是FUNCNAME即使在/bin/sh中也可以在Mac上使用,所以我想知道为什么它在Linux上是空的 - 因此是OP。 在variables打开规范可以得到一些启示(见接受的答案),但我仍然很好奇其他功能还有什么。

如何查看与函数相关的 environment shell变量:

  

set应在当前语言环境的归类序列中写入所有shell变量的名称和值

所以

$ set > a

$ function f() {
    set > b
}

$ f

然后

diff a b

会在bash中给我函数相关的变量(并且没有像预期的那样在sh中)

> BASH_LINENO=([0]="5")
14a15
> FUNCNAME=([0]="f")
55c56