【问题标题】:Bash: Pass array as argument then add new elementBash:将数组作为参数传递,然后添加新元素
【发布时间】:2012-12-09 17:07:33
【问题描述】:

我想将一个数组作为参数传递给一个函数并向该数组添加一个新元素。 然后将数组传递给另一个函数并打印其内容。 (所有这些都在 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

【问题讨论】:

  • 请问有什么问题
  • @Satya 添加了实际问题。
  • 如果您将 add_element 中的行更改为以下内容: eval $a+='('$*')' ;那么你应该是金色的。

标签: arrays bash argument-passing


【解决方案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 中不需要这些函数。

【讨论】:

  • 感谢您的回答。但是我正在尝试测试/推动 Bash 的极限。并感谢有关变量名称的建议。
猜你喜欢
  • 2016-11-18
  • 1970-01-01
  • 2010-11-06
  • 2012-05-24
  • 1970-01-01
  • 2015-06-28
  • 2011-08-06
  • 1970-01-01
相关资源
最近更新 更多