使用数组时出现语法错误

0.s*_*.sh 5 bash shell

我正在创建一个函数,第一个参数将被用作一个全局变量,它保存由参数的其余部分填充的数字数组,但是在分配值时我得到语法错误,但是如果我只是为变量分配一个标量有用.这是下面的代码

的值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)

看到它适用于标量并且错误是为数组吐出的,我有点惊讶.我怎么解决这个问题?

Pes*_*The 3

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了解更多信息。

  • @0.sh 问题是,“local”的“help”只是说“OPTION 可以是“declare”接受的任何选项。因此,要查看选项(例如“-n”),您需要使用“help declare”。 (2认同)