根据传递给函数的参数创建变量

Create a variable based on arguemnt passed to a function

请花点时间帮助我完成这部分(shell 脚本)
我有一个代码是

helper()
{
  var1=""
  #multiple lines of code
  .
  . 
  #so the variable must be created based on what value is passed as an argument.
  $var1_var_name="some string"
  #so I should be able to make a varible abc_var_name in this case

}
helper "abc"

所以我想在辅助函数中创建一个变量,这样变量名称就是

如果调用 helper "abc" 那么变量应该是 abc_var_name="some string"
或者如果调用 helper "def" 那么变量应该是 def_var_name="some string"

您可能需要 namerefs(使用足够新的 bash 版本):

$ helper() {
    declare -n tmp=""_var_name
    tmp="some string"
  }
$ helper "abc"
$ echo "$abc_var_name"
some string

如果您的 bash 版本太旧,您还可以使用 read 设置命名变量:

$ helper() {
    IFS= read -r ""_var_name <<< "some string"
  }
$ helper "abc"
$ echo "$abc_var_name"
some string

printf:

$ helper() {
    printf -v ""_var_name '%s' "some string"
  }
$ helper "abc"
$ echo "$abc_var_name"
some string

为了完整起见,正如评论中所建议的,如果您接受稍微改变您的方法,关联数组是另一种选择:您所有的命名变量都成为关联数组的元素var_name,数组的键是您传递给函数的名称,值是您想要的任何值。一个重要的好处是您可以轻松地遍历所有变量:

$ declare -A var_name=()
$ helper() {
    var_name[""]="some string"
  }
$ helper "abc"
$ helper "def"
$ for key in "${!var_name[@]}"; do
    printf '%s: %s\n' "$key" "${var_name[$key]}"
  done
def: some string
abc: some string