ファイルの内容と同じdiffにBASH配列を渡します。

ファイルの内容と同じdiffにBASH配列を渡します。

次の2つの配列がありますbash

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

を使って比較したいですdiff。配列をファイルの内容としてどのように渡しますか?

いくつかのバリエーションを試しましたが、すべて失敗しました。

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' )"

希望の出力は期待される出力になりますdiff -y。配列をファイルaとbに保存すると、次の出力が得られます。

diff a b
 1        1
 2        2
 3      | A

(読みやすいスペースを減らす)

速度上の理由で中間ファイルの作成を避けたい。しかし、tmpfs疑似ファイルはRAMベースの解決策であることがわかっています。

答え1

使用printfプロセスの交換

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

関連情報