Você só precisa usar:
echo {#cws[@]}
-
{#cws}é normalmente usado para retornar o comprimento de uma string - o
[@]é importante, porque sem isso, o valor de$cwsnão é a matriz inteira, ele é o primeiro elemento do valor da matriz, também conhecido como$cws[0]
Por exemplo, em nosso prompt de comando, podemos fazer uma matriz simples de três elementos semelhante à sua:
$ cws[0]="11"; cws[1]="2"; cws[3]="8"
Agora veja o que acontece quando nos referimos apenas a $cws :
$ echo $cws
11
Então, ao usar a expansão bash para determinar o tamanho de algo, {# ... } , sem o [@] , você escreve ${#cws} , $cws é 11 , então você está pedindo bash "qual é o comprimento de 11"? e, claro, o bash olha para a string 11 que tem dois caracteres, então Bash diz 'Oh, é 2':
$ echo ${#cws}
2
Então, é por isso que para especificar você quis dizer o tamanho do array, lembre-se do [@] :
$ echo ${#cws[@]}
3