Seu código está gerando um erro de sintaxe para cada elemento que não está definido.
$ echo "${cluster1[0]+1}+${cluster2[0]+1}+${cluster2[0]+1}"
1+1+1
$ echo "${cluster1[1]+1}+${cluster2[1]+1}+${cluster3[1]+1}"
1+1+
Seria melhor contar os elementos do conjunto em vez de tentar calcular com uma expressão gerada neste caso:
#!/bin/bash
cluster1=(x y)
cluster2=(a b)
cluster3=(m)
for (( i = 0; i < 3; ++i )); do
is_set=( ${cluster1[i]+"1"} ${cluster2[i]+"1"} ${cluster3[i]+"1"} )
printf 'i=%d:\t%d\n' "$i" "${#is_set[@]}"
done
Isso cria uma nova matriz, is_set
, que conterá 1
para cada matriz que contém um elemento no índice i
. O 1
não é importante e pode ser qualquer string. O número de elementos na matriz is_set
( ${#is_set[@]}
) é o número de elementos de conjunto das matrizes cluster
nesse índice.
Teste:
$ bash script.sh
i=0: 3
i=1: 2
i=2: 0