我是 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