Ksh*_*rma 5 bash shell-script function
我正在尝试使用以下代码动态定义 bash 函数:
delegate_function() { echo "output from delegate"; }
eval "parent_function() { echo $(delegate_function); }"
Run Code Online (Sandbox Code Playgroud)
目的是让父函数在执行时动态分派给委托。但是,由于eval工作方式,我的函数定义如下:
kshitiz:/tmp$ type parent_function
parent_function is a function
parent_function ()
{
echo output from delegate
}
Run Code Online (Sandbox Code Playgroud)
我如何才能将定义改为:
parent_function ()
{
echo $(delegate_function);
}
Run Code Online (Sandbox Code Playgroud)
有没有办法避免字符串的某些部分被评估eval?
Joh*_*024 10
在 bash 中,就像在大多数语言中一样,eval是需要避免的。例如,请参阅 Greg 的常见问题解答:Eval 命令和安全问题
你可以这样定义parent_function:
parent_function=delegate_function
Run Code Online (Sandbox Code Playgroud)
任何时候你想用来parent_functiondispatch delegate_function,只要运行:
$ $parent_function
output from delegate
Run Code Online (Sandbox Code Playgroud)
让我们来定义delegate_function和parent_function并运行$parent_function:
$ delegate_function() { echo "delegate version 1"; }
$ parent_function=delegate_function
$ $parent_function
delegate version 1
Run Code Online (Sandbox Code Playgroud)
现在让我们更改delegate_function并$parent_function再次运行:
$ delegate_function() { echo "delegate version 2"; }
$ $parent_function
delegate version 2
Run Code Online (Sandbox Code Playgroud)
$parent_function 立即更新以运行新版本的 delegate_function。
让我们创建我们的委托函数:
$ delegate_function() { echo "delegate function executed"; }
Run Code Online (Sandbox Code Playgroud)
让我们指定一些名称:
$ parent_function=some_name
Run Code Online (Sandbox Code Playgroud)
现在,让我们演示该名称的动态分配:
$ typeset $parent_function=delegate_function
$ $some_name
delegate function executed
Run Code Online (Sandbox Code Playgroud)
转义$应该足以使这项工作:
eval "parent_function() { echo \$(delegate_function); }"
Run Code Online (Sandbox Code Playgroud)