我正在创建一个函数,第一个参数将被用作一个全局变量,它保存由参数的其余部分填充的数字数组,但是在分配值时我得到语法错误,但是如果我只是为变量分配一个标量有用.这是下面的代码
的值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[@]}
Run Code Online (Sandbox Code Playgroud)
但如果我用标量试了它就行了
#!/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[@]}
Run Code Online (Sandbox Code Playgroud)
看到它适用于标量并且错误是为数组吐出的,我有点惊讶.我怎么解决这个问题?
在bash4.3 或更高版本中,您可以使用nameref:
#!/usr/bin/env bash
create() {
local -n name=$1; shift
name=("$@")
}
create a 1 2 3 4
printf '%s\n' "${a[@]}"
Run Code Online (Sandbox Code Playgroud)
1
2
3
4
Run Code Online (Sandbox Code Playgroud)
请参阅Bash 常见问题解答 #6了解更多信息。