如何计算bash中定义的数组的长度?

AGa*_*yer 96 bash array

我是 bash 新手,找不到很好的教程来回答我的问题。

array=( item1 item2 item3 )
for name in ${array[@]}; do
    echo current/total
    ... some other codes
done
Run Code Online (Sandbox Code Playgroud)

我想计算currenttotal值,因为它的预期输出是:

1/3
2/3
3/3
Run Code Online (Sandbox Code Playgroud)

感谢您提供任何提示。

ste*_*ver 155

您可以使用访问数组索引${!array[@]}和使用数组的长度${#array[@]},例如:

#!/bin/bash

array=( item1 item2 item3 )
for index in ${!array[@]}; do
    echo $index/${#array[@]}
done
Run Code Online (Sandbox Code Playgroud)

请注意,由于 bash 数组的索引为零,您实际上会得到:

0/3
1/3
2/3
Run Code Online (Sandbox Code Playgroud)

如果您希望计数从 1 开始运行,您可以替换$index$((index+1)). 如果您想要以及索引,您可以使用"${array[index]}"

#!/bin/bash

array=( item1 item2 item3 )
for index in ${!array[@]}; do
    echo $((index+1))/${#array[@]} = "${array[index]}"
done
Run Code Online (Sandbox Code Playgroud)

给予

1/3 = item1
2/3 = item2
3/3 = item3
Run Code Online (Sandbox Code Playgroud)