Passa a matriz BASH para diferenciar como o conteúdo do arquivo

4

Eu tenho dois bash arrays, digamos:

arr1=( 1 2 3 )
arr2=( 1 2 A )

e quero compará-los usando diff . Como eu poderia passar as matrizes como se fossem o conteúdo de um arquivo?

Eu tentei algumas variações, mas todas falharam:

diff -y <$( echo ${arr1[@]} | tr ' ' '\n' ) <$( echo ${arr2[@]} | tr ' ' '\n' )
diff -y <${arr1[@]} <${arr2[@]}
diff -y $(<${arr2[@]}) $(<${arr1[@]})
diff -y  <<<"$( echo ${arr1[@]} | tr ' ' '\n' )" \
         <<<"$( echo ${arr2[@]} | tr ' ' '\n' )"

A saída desejada seria a esperada de diff -y , que recebo se eu armazenar as matrizes nos arquivos a e b:

diff a b
 1        1
 2        2
 3      | A

(menos espaços para legibilidade)

Eu gostaria de evitar a gravação de arquivos intermediários por motivos de velocidade, embora esteja ciente de tmpfs pseudo arquivos como solução alternativa baseada em RAM.

    
por Fiximan 17.08.2015 / 13:41

1 resposta

9

Usando printf e substituição de processos

diff -y  <(printf '%s\n' "${arr1[@]}")  <(printf '%s\n' "${arr2[@]}")
1                                                               1
2                                                               2
3                                                             | A
    
por 17.08.2015 / 13:55