根据传递给函数的参数创建变量
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
请花点时间帮助我完成这部分(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