Bash:将数组作为参数传递,然后添加新元素

时间:2012-12-22 09:27:43

标签: arrays bash argument-passing

我想将一个数组作为参数传递给一个函数,并向该数组添加一个新元素。 然后将数组传递给另一个函数并打印其内容。 (这一切都在Bash中。)

syntax error near unexpected token `"$2"'
`        $1+=("$2")'

这是我得到的全部,可能是因为无法使用为变量$分配值。我不知道如何解决这个问题。你能救我吗?

这是我的方法:

#/bin/bash

add_element()
{
    $1+=("$2")
}

print_array()
{
    for i in "${$1[@]}"
    do
        echo "$i"
    done
}

declare -a ARRAY

add_element ARRAY "a"
add_element ARRAY "b"
add_element ARRAY "1,2"
add_element ARRAY "d"

print_array ARRAY

1 个答案:

答案 0 :(得分:1)

这是一种可能性,使用间接扩展

#/bin/bash

add_element()
{
    local a="$1[@]"
    a=( "${!a}" )
    printf -v "$1[${#a[@]}]" "%s" "$2"
}

print_array()
{
    local a="$1[@]"
    printf '%s\n' "${!a}"
}

declare -a array

add_element array "a"
add_element array "b"
add_element array "1,2"
add_element array "d"

print_array array

评论:

  • 这真的很难看。我不知道你为什么这么想。请注意bash不是为了做这些事情而设计的。也许你想用php或perl或java或其他东西代替。
  • 不要在bash中使用大写变量名。这被认为是非常糟糕的bash练习。它很丑。这很糟糕,特别是当它可能与其他变量冲突时,如果有人使用mapfile内置(默认情况下存储在名为ARRAY的数组中),可能就是这种情况。
  • 请考虑使用不同的东西来实现您的目标。实际上,你不需要在bash中使用这些函数。