请花点时间帮助我完成这部分(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