Bash 3.0 不支持列表?

Bash 3.0 不支持列表?

我编写了一个小脚本,添加从配置文件中获取的特定 IP 地址,然后将其放入列表中:

  WAS_IP=$(grep "<was_ip>" $CONFIG| cut -d '>' -f 2 | cut -d '<' -f 1 | xargs)

  NODES=()
  NODES+=("$WAS_IP")

在 bash 上,3.2.25这工作正常,但在3.0我的生产环境中,这会出现错误:

./config.sh: line 3154: syntax error near unexpected token `"$WAS_IP"'
./config.sh: line 3154: `      NODES+=("$WAS_IP")'

我怎样才能避免这个问题?

答案1

+=运算符出现在 Bash 3.1 版本中。

  • 在旧版本中,如果数组不是稀疏的,您可以分配给数组最后一个元素之后的元素:

    NODES[${#NODES[@]}]="$WAS_IP"
    

    如果您在某个位置附加新值,则可以使用单独的计数器变量:

    NODES=()
    NODES_length=0
    NODES[NODES_length++]="$WAS_IP"
    

    但这比用 询问数组的长度要快一些${#NODES[@]}

  • 或者您可以将整个数组分配给现有元素和新元素:

    NODES=("${NODES[@]}" "$WAS_IP")
    

    不用说,最好避免后一种情况。如果数组最初是稀疏的,则数组索引将在分配后发生变化。

相关内容