小编典典

在bash中将数组作为参数传递

all

如何将数组作为参数传递给 bash 函数?

注意: 在 上没有找到答案后,我自己发布了一些粗略的解决方案。它只允许传递一个数组,并且它是参数列表的最后一个元素。实际上,它根本不是传递数组,而是传递其元素的列表,这些元素通过
重新组装成一个数组called_function(),但它对我有用。如果有人知道更好的方法,请随时在此处添加。


阅读 64

收藏
2022-06-27

共1个答案

小编典典

您可以使用以下方法将 多个数组作为参数 传递:

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

将回显:

sli4-iread sli4-iwrite sli3-iread sli3-iwrite  
--msix  --iread --msix  --iwrite --msi   --iread --msi   --iwrite

编辑/注释:( 来自下面的评论)

  • descTableoptsTable作为名称传递并在函数中展开。因此$,当作为参数给出时不需要。
  • 请注意,即使descTableetc 用 定义,这仍然有效local,因为局部变量对它们调用的函数是可见的。
  • !in扩展了${!1}arg 1 变量。
  • declare -a只是使索引数组显式,这不是绝对必要的。
2022-06-27