bash:如何从变量创建函数?

con*_*use 20 bash function

如何创建一个从内容变量命名的函数?我想编写一个模板脚本,用于定义以脚本自己的文件名命名的函数.像这样的东西(当然不起作用):

#!/bin/bash
bname="$(basename $0)" # filename of the script itself

someprefix_${bname}() { # function's name created from $bname variable
    echo test
}
Run Code Online (Sandbox Code Playgroud)

因此,如果脚本的文件名是foo.sh,那么它应该定义一个名为someprefix_fooecho test 的函数.

Eug*_*ash 21

你可以使用eval:

eval "someprefix_${bname}() { echo test; }"
Run Code Online (Sandbox Code Playgroud)

Bash甚至允许"."在函数名称中使用:)


小智 10

实际上,上述结构破坏了在其中嵌入引号的可能性并且因此可能是错误的,这是有益的.然而,以下结构确实提供了类似的功能,同时没有前一个答案的约束.

供您审核:

source /dev/stdin <<EOF
function someprefix_${bname}()
{
     echo "test";
};
EOF
Run Code Online (Sandbox Code Playgroud)