我正在创建一个函数,第一个参数将用作全局变量,该变量包含由参数的其余部分填充的数字数组,但是在分配值时出现语法错误,但是如果我只是指定一个标量它的工作变量。这是下面的代码
new_set_name
的值a
将包含所有数组元素
#!/usr/bin/env bash
create() {
local new_set_name=${1}
shift;
declare -g ${new_set_name}=( ${@} );
echo ${!new_set_name}
}
create a 1 2 3 4
echo ${a[@]}
但如果我用标量尝试它就可以了
#!/usr/bin/env bash
create() {
local new_set_name=${1}
shift;
declare -g ${new_set_name}=1;
echo ${!new_set_name}
}
create a 1 2 3 4
echo ${a[@]}
看到它对标量有用并且错误是为数组吐出的,我感到有些惊讶。我该如何解决这个问题?
答案 0 :(得分:3)
在bash
4.3或更高版本中,您可以使用nameref
:
#!/usr/bin/env bash
create() {
local -n name=$1; shift
name=("$@")
}
create a 1 2 3 4
printf '%s\n' "${a[@]}"
1
2
3
4
有关详细信息,请参阅Bash FAQ #6。