Existem algumas coisas que precisam ser corrigidas aqui.
-
Quando você diz que faz arrays,
arr1
earr2
são iguais. Não, eles não são . A declaração dearr1
é válida, masarr2
não é! É uma string. Fazer o abaixo atribui a saída da expansão de array dearr1
como 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 dearr1
adequadamente 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; done
is 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"; done
O loop sobre
arr2
está 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 converterarr2
para 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ásicotest
operator[
. O caminho certo para comparar dois arrays seria iterar um sobre o outro e fazer uma correspondência de igualdade.