gpt4 book ai didi

arrays - 无法检索所有数组元素

转载 作者:行者123 更新时间:2023-12-04 05:44:13 29 4
gpt4 key购买 nike

我有一个脚本,我在其中定义了两个数组。现在根据传递的数组名称(作为参数),我想在下面的函数中处理相同的内容。早些时候,在我使用 ${!} 之前,我什至没有在变量 'ARRAY' 中得到任何元素。

现在的问题是,当我打印数组内容(或该数组中的元素数)时,我只得到第一个元素。

有什么建议?

脚本:

#!/bin/bash

APP=$1

process_data() {
ARRAY="${!1}"
echo "No of array elements: ${#ARRAY[@]}"
echo "Array content: ${ARRAY[@]}"
}


ORADATA=(
"oraserver/content:abcDaily/ORAServer/"
"oraserver/w3s-ix86:abcDaily/ORAServer/"
)

SQLDATA=(
"sqlserver/content:abcDaily/SQLServer/"
"sqlserver/w3s-ix86:abcDaily/SQLServer/"
)

process_data ${APP[@]}

命令:
-bash-2.05b$ ./testarray.sh ORADATA

输出:
No of array elements: 1
Array content: oraserver/content:abcDaily/ORAServer/

最佳答案

这是一个没有 eval 的版本(因此它可以正确处理数组值中的 shell 元字符):

#!/bin/bash

APP=$1

process_data() {
ARRAYVAR="$1[@]" # This just textually appends "[@]" to $1
ARRAY=("${!ARRAYVAR}") # Use indirect expansion to get contents of array, store as new array
echo "No of array elements: ${#ARRAY[@]}"
echo "Array content: ${ARRAY[@]}"
}


ORADATA=(
"oraserver/content:abcDaily/ORAServer/"
"oraserver/w3s-ix86:abcDaily/ORAServer/"
)

SQLDATA=(
"sqlserver/content:abcDaily/SQLServer/"
"sqlserver/w3s-ix86:abcDaily/SQLServer/"
)

process_data $APP # Note that APP is not an array, so the [@] bit was irrelevant

例子:
$ ./testarray.sh ORADATA
No of array elements: 2
Array content: oraserver/content:abcDaily/ORAServer/ oraserver/w3s-ix86:abcDaily/ORAServer/

关于arrays - 无法检索所有数组元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10897619/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com