gpt4 book ai didi

bash FUNCNAME 值扩展

转载 作者:行者123 更新时间:2023-11-29 09:49:18 25 4
gpt4 key购买 nike

我有一个库文件。它有一个类似包装器的 ponOS 函数替换。我想在函数 ponOS 中显示调用它的函数的名称。

$> cat ./parasha_lib.sh 
#!/bin/bash

function ponOS {
echo "$1: hello from ponOS"
}

ponOS='ponOS ${FUNCNAME}'

但是,我看到的是这个解决方案并没有达到我想要的效果。

$> cat ./test.sh 
#!/bin/bash

source ./parasha_lib.sh

function main {
echo "message from ${FUNCNAME}"
ponOS
}

main

所以,我有

$> ./test.sh 
message from main
: hello from ponOS

但我想得到这个:

$> ./test.sh 
message from main
main: hello from ponOS

我该怎么办?

这里重要的事情之一是 ./test.sh 不应该被修改(ponOS ${FUNCNAME} 这不是解决方案)。

最佳答案

为此,您需要将 ponOS 设置为别名,以便在主函数中调用时扩展 ${FUNCNAME} 而不是在获取脚本时.

修改./parasha_lib.sh为:

#!/bin/bash

function ponOS {
echo "$1: hello from ponOS"
}

shopt -s expand_aliases # enable alias expansion
alias ponOS='ponOS ${FUNCNAME}' # create an alias to call ponOS

请注意,shopt -s expand_aliases 是启用别名扩展所必需的。来自 bash 联机帮助页:

Aliases are not expanded when the shell is not interactive, unless the expand_aliases shell option is set using shopt

现在,在不更改 test.sh 的情况下,我们得到了所需的输出:

[me@home]$ ./test.sh
message from main
main: hello from ponOS

关于bash FUNCNAME 值扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7650438/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com