在我的脚本中,我发现对数组的某些操作是可重用的。因此,我正在考虑将可重用代码重构为函数或脚本。
但是,如何编写函数或脚本,以便可以将数组作为位置参数提供给函数或脚本?或实现类似的目标?
谢谢。
在((== 4.3)的最新版本中使用名称引用bash
:
foo () {
local param1=$1
local -n arr=$2
printf 'array: %s\n' "${arr[@]}"
}
myarray=( some items go here )
foo something myarray
数组变量的名称作为第二个参数传递给函数。该函数声明一个名称引用变量,该变量接收该名称。对该名称引用变量的任何访问都将访问其名称已传递给该函数的变量。
这显然适用于多个数组。
请注意,在上面的示例中,您无法将命名变量传递arr
给该函数,因此必须小心避免名称冲突(ksh93
,它也支持名称引用,由于范围不同,因此不会出现此问题)。
请注意,这种方法并不能调用另一个shell脚本时工作。调用另一个Shell脚本时,必须在该另一个脚本的命令行上传递该数组,这意味着它必须作为一组字符串传递。以这种方式传递单个数组相对容易,而Hauke Laging在他的回答中展示了如何执行此操作的基础知识。
如果您完全控制数组的内容,则可以将它们的数据编码为单个字符串,方法可能是使用一些定界符对它们的元素进行定界,然后在目标脚本中解析这些字符串以重新形成数组。另一种可能性是在脚本之间采用JSON“接口”,这意味着您将数据编码为JSON,将其传递到脚本的标准输入(或类似输入),然后使用解码文档jq
。不过,这确实很麻烦,并且会增加大量开销。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句