【发布时间】:2023-04-06 12:25:01
【问题描述】:
为了调试我的脚本,我想在每个输出的开头添加内部变量 $FUNCNAME 和 $LINENO,这样我就知道输出发生在哪个函数和行号上。
foo(){
local bar="something"
echo "$FUNCNAME $LINENO: I just set bar to $bar"
}
但是由于会有很多调试输出,如果我可以执行以下操作会更简洁:
foo(){
local trace='$FUNCNAME $LINENO'
local bar="something"
echo "$trace: I just set bar to $bar"
}
但上面的字面意思是: “$FUNCNAME $LINENO:我刚刚设置了一些东西” 我认为这样做是因为双引号仅在内部扩展变量一次。
有没有一种语法简洁的方法可以在同一行中将变量扩展两次?
【问题讨论】:
-
哎呀。如果您的变量中只有一个变量名,那将很容易——在这种情况下,它只是标准的间接扩展。相比之下,如果你想用任意数量的变量扩展一个模板,你就会进入
eval空间,这显然是不安全的。 -
this 几乎可以工作 - 如果
local trace=FUNCNAME那么你可以写echo ${!trace} ": I just set bar to $bar" -
@codeforester ...这是一个相当严厉的标题编辑。从我的(原始)答案 f/e 顶部的单行摘要中完全删除上下文,并适用于不解决 OP 关于扩展的直接/直接问题的答案根本 .
-
我也是这么想的……既然你这么说,我就回滚了。
标签: linux bash parameter-passing variable-expansion parameter-expansion