使用数组时出现语法错误

时间:2018-01-07 17:42:51

标签: 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[@]}

但如果我用标量尝试它就可以了

#!/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[@]}
看到它对标量有用并且错误是为数组吐出的,我感到有些惊讶。我该如何解决这个问题?

1 个答案:

答案 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