调用其名称存储在bash中的变量中的函数

hjp*_*r92 15 bash shell scripting

比方说我有:

function x {
    echo "x"
}
call_func="x"
Run Code Online (Sandbox Code Playgroud)

现在,我可以简单地使用eval如下:

eval $call_func
Run Code Online (Sandbox Code Playgroud)

但我想知道是否有其他方式调用函数(如果它存在),其名称存储在变量中:call_func.

Dak*_*ron 21

您应该可以直接使用调用该函数

$call_func
Run Code Online (Sandbox Code Playgroud)

对于其他一切,请查看答案:https://stackoverflow.com/a/17529221/3236102 这不是您所需要的,但它显示了许多不同的方法来调用命令/功能.

让用户执行任意代码是不好的做法,因为它可能非常危险.更好的是这样做:

if [ $userinput == "command" ];then
    command
fi
Run Code Online (Sandbox Code Playgroud)

这样,用户只能执行您希望它们执行的命令,如果输入不正确,甚至可以输出错误消息.

  • 我建议使用 ```case $userinput in; 命令1|命令2|命令) $userinput ;; esac``` 这样你就可以安全地检查输入,但由于使用许多显式的 if-else 而噪音更少 (2认同)