如何使用变量定义Bash函数名?解决循环定义报错问题
解决Bash中用变量定义函数名的问题
Bash的function关键字语法不支持直接在其后使用变量作为函数名,这是你遇到报错的核心原因。以下两种方法可实现动态定义同名模式函数的需求:
方法一:使用eval构造函数定义
通过eval将拼接好的函数定义字符串作为命令执行,实现动态命名函数:
for f in a b c do eval "function $f { . mydir/\$f; }" done
注意函数体内的\$f需要转义,避免eval执行时直接替换为循环变量的值,确保函数调用时能正确引用对应路径的脚本。
方法二:使用declare -f定义函数
declare -f是Bash内置的函数定义命令,支持直接用变量作为函数名,安全性比eval更高:
for f in a b c do declare -f "$f"='() { . mydir/$0; }' done
这里利用函数内的$0指代当前函数名,无需重复依赖循环变量f,写法更简洁通用。
内容的提问来源于stack exchange,提问作者oldpride
相关产品推荐
相关产品推荐

