将数组传递给 bash 脚本中的函数

将数组传递给 bash 脚本中的函数

我是 bash 脚本和编写 bash 脚本的新手。我已经声明了一个数组并给出了值。但是当我在循环中传递数组时,值没有进入循环。下面是我的代码

declare -a files=( "A1S0" "D1S0" "D2S0" "D3S0" "D4S0" "D5S0" "D6S0" )
command_to_get_filesizes() {
  for i in "${!files[@]}"; do
     echo Processing file "${i[${index}]}"
  done
}
command_to_get_filesizes

预期输出

A1S0
D1s0
D2S0
D3S0
D5S0
D680

但我得到的输出为

Processing file 0
Processing file 1
Processing file 2
Processing file 3
Processing file 4
Processing file 5
Processing file 6

谁能帮我打印数组中的值

答案1

变量“索引”未定义。你的意图是

echo Processing file "${files[i]}"

原作的作用是模糊的。所有变量(可能)都是具有第零个元素的数组。 (尝试echo "${PATH[$junk]}"。)这样整个构造"${i[${index}]}"就解析为${i[0]},这只是回响$i

您的标题有点误导:您没有将数组传递到函数中(作为参数):它只是一个全局数组变量。

@Siva 是正确的,因为您可以简单地迭代数组值。但是,如果您在同一次迭代中同时需要索引和值,这对我来说很合适。

for n in "${!N[@]}"; do
    printf '%8d  %s\n' "${n}" "${N[n]}"
done

答案2

根据您的预期输出,

  • 我们不需要该echo命令中的“处理文件”。
  • 在循环中循环数组时,我们不需要传递数组的索引值for

尝试作为

declare -a files=( "A1S0" "D1S0" "D2S0" "D3S0" "D4S0" "D5S0" "D6S0" )
command_to_get_filesizes() 
{
  for i in "${files[@]}"; do
    echo "$i"
  done
}
command_to_get_filesizes

相关内容