如何将数组作为参数传递给 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

编辑/注释:(来自下面的评论)
  • descTableoptsTable 作为名称传递并在函数中扩展。因此,当作为参数给出时,不需要 $
  • 请注意,即使使用 descTable 定义了 local 等,这仍然有效,因为局部变量对它们调用的函数是可见的。
  • ! 中的 ${!1} 扩展了 arg 1 变量。
  • declare -a 只是使索引数组显式,并不是绝对必要的。
  • 关于arrays - 在bash中将数组作为参数传递,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1063347/

    10-16 21:43