根据传递给函数的argument创建一个变量



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

helper()
{
var1="$1"
#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函数中创建一个变量,这样变量名就会是

如果helper";abc">,则变量应为abc_var_name=";一些字符串">
或者如果helper"def">,则变量应为def_var_name=";一些字符串";

您可能想要namerefs(带有足够新的bash版本(:

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

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

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

printf:

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

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

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

相关内容

  • 没有找到相关文章

最新更新