如何将数组作为参数传递给 bash 函数?
注意: 在 Stack Overflow 上没有找到答案后,我自己发布了我的粗略解决方案。它只允许传递一个数组,并且它是参数列表的最后一个元素。实际上,它根本没有传递数组,而是传递它的元素列表,这些元素被 called_function()
重新组装成一个数组,但它对我有用。如果有人知道更好的方法,请随时在此处添加。
最佳答案
您可以使用以下方法将 多个数组作为参数 传递:
takes_ary_as_arg()
{
declare -a argAry1=("${!1}")
echo "${argAry1[@]}"
declare -a argAry2=("${!2}")
echo "${argAry2[@]}"
}
try_with_local_arys()
{
# array variables could have local scope
local descTable=(
"sli4-iread"
"sli4-iwrite"
"sli3-iread"
"sli3-iwrite"
)
local optsTable=(
"--msix --iread"
"--msix --iwrite"
"--msi --iread"
"--msi --iwrite"
)
takes_ary_as_arg descTable[@] optsTable[@]
}
try_with_local_arys
会 echo :
sli4-iread sli4-iwrite sli3-iread sli3-iwrite
--msix --iread --msix --iwrite --msi --iread --msi --iwrite
编辑/注释:(来自下面的评论)
descTable
和 optsTable
作为名称传递并在函数中扩展。因此,当作为参数给出时,不需要 $
。 descTable
定义了 local
等,这仍然有效,因为局部变量对它们调用的函数是可见的。 !
中的 ${!1}
扩展了 arg 1 变量。 declare -a
只是使索引数组显式,并不是绝对必要的。 关于arrays - 在bash中将数组作为参数传递,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1063347/