Existem algumas coisas que precisam ser corrigidas aqui.
-
Quando você diz que faz arrays,
arr1earr2são iguais. Não, eles não são . A declaração dearr1é válida, masarr2não é! É uma string. Fazer o abaixo atribui a saída da expansão de array dearr1como uma string.arr2=${arr1[@]} declare -p arr2 declare -- arr2="2 3 4"Para declará-lo como uma matriz, você precisa ter o
(..)presente e citar a expansão da matriz dearr1adequadamente para preservar a separação dos elementos.arr2=("${arr1[@]}") declare -p arr2 declare -a arr2='([0]="2" [1]="3" [2]="4")' -
A iteração de uma matriz usando
for i in $arr1; do echo $i; doneis não funciona. É uma construção incorreta embash, que de alguma forma é traduzida para${arr1[0]}. A sintaxe certa a usar éfor i in "${arr1[@]}"; do echo "$i"; doneO loop sobre
arr2está novamente incorreto. Você pode assumir que o loop é feito em uma matriz. Mas é uma string. Isso é feito em uma única string dividida por espaços. Você precisa primeiro converterarr2para o formato de matriz apropriado e iterar como mencionei acima. -
A verificação de igualdade também está incorreta, pois
if [[ $arr1==$arr2 ]]compara o comprimento da string diferente de zero, ou seja, todo o$arr1==$arr2é tratado como uma string inteira por[[operator e é por isso que você está vendo correspondência condição para isso. O mesmo poderia falhar se você tivesse usado o% básicotestoperator[. O caminho certo para comparar dois arrays seria iterar um sobre o outro e fazer uma correspondência de igualdade.