我正在编写一个 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)。