Bash 获取数组长度和偏移量

Bash 获取数组长度和偏移量

我正在编写一个 bash 脚本,我需要获取从元素开始的数组的长度。

假设该数组是:

array=(1 2 3 4 5)

可以使用以下命令打印偏移量为 2 的数组:

echo ${array[@]:2}
3 4 5

可以使用以下命令打印数组的长度:

echo ${#array[@]}
5

我尝试使用以下命令打印偏移量为 2 的数组长度:

echo ${#array[@]:2}

不起作用,预期结果是:

3

我找到了一种方法,但我不确定这是否是最好的方法:

echo $(( ${#array[@]} - 2 ))
3

有没有最好的方法来做到这一点?

谢谢!

答案1

${var:2}也是一个子字符串扩展,它扩展为$var删除前两个字符的值。考虑到这一点,${#array[@]:2}似乎有点模棱两可,是否应该首先从数组中取出两个元素,然后获取长度?或者应该首先获取长度,然后从该数字中取出前两个字符?

后者可以说是愚蠢的,但是第一个也是不必要的,因为人们可以按照你所做的那样从数组的全长中减去 2。

无论如何,ksh 也不支持${#array[@]:2}。由于 Bash 的许多功能最初来自 ksh,这也可能是 Bash 不支持它的原因。另一方面,Zsh 确实处理了${#array[@]:2},它给出了数组的长度减 2(所以是您在示例中期望的 3)。

相关内容