在 bash 函数名称中使用变量

问题描述 投票:0回答:1

在声明名称中包含变量的函数时,我正在寻找 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 提供哪些替代方案?

bash function global-variables eval
1个回答
0
投票

为什么依赖函数名而不是参数?

package() {
  local -r pkg="$1"
  case "$pkg" in
    pkg1)
      do_something;;
    pkg2)
      do_something;;
  esac
  do_something
}

...
package pkg1
© www.soinside.com 2019 - 2024. All rights reserved.