在声明名称中包含变量的函数时,我正在寻找 eval 的替代方案。示例:
pkgname=(pkg1 pkg2 pkg3)
for I in ${pkgname[@]};do eval "package_$I(){
[ $I = pkg1 ] && do something
[ $I = pkg2 ] && do something
[ $I = pkg3 ] && do something
do something
do something
}";done
按需要工作,除了(据我所知)eval 以这种方式使用并不安全。 Bash 提供哪些替代方案?
为什么依赖函数名而不是参数?
package() {
local -r pkg="$1"
case "$pkg" in
pkg1)
do_something;;
pkg2)
do_something;;
esac
do_something
}
...
package pkg1