0

我正在编写一个脚本,该脚本具有许多功能,可以从几个不同的数组中提取数据。我们希望保持阵列个性化以用于报告目的。数组中的信息不会改变,每个函数之间唯一不同的是正在使用的数组名称。由于所有功能都有 98% 的相同内容,我试图将它们拉入 1 个单一阵列以简化管理。

我面临的问题是我无法根据函数参数中传递的数组标题找出正确的语法来获取数组的长度。我不能发布实际的脚本,但这里有一个模型,详细说明了我正在测试的简化版本。我相信如果我们可以使用下面的模拟脚本让它工作,我可以将所需的更改转移到实际脚本中。

array1=(
    "item1 123"
    "item2 456"
)

array2=(
    "stockA qwe"
    "stockB asd"
    "stockC zxc"
)

test() {
     local ref=${1}[@]
     IFS=$'\n'; for i in ${!ref}; do echo $i ; done
}

test array1
test array2

到目前为止,上面的脚本将在调用函数及其参数时根据参数 1 回显每个数组行的内容;这是根据需要工作的。我尝试了许多不同的组合,例如,len=${#${1}[@]}但我总是收到“错误替换”错误。我之前提到的函数有 while 循环和 for 语句,它们使用数组长度来知道何时停止,因此能够提取这些信息确实将它们联系在一起。我希望的是类似于下面的流程

我计划继续对此进行研究,但感谢您提供的任何帮助和知识!

-氰化物

4

1 回答 1

0

我认为唯一的解决方案是创建数组的副本,然后取该数组的长度:

local ref=${1}[@]
copy=( "${!ref}" )
len=${#copy[@]}

由于bash不允许参数扩展运算符的链接,我知道没有更短的方法可以在同一行上同时${#...}使用两者。${!...}

于 2013-03-28T14:13:13.220 回答