通过 BASH 数组来区分文件内容

Fel*_*xJN 4 bash diff io-redirection array

我有两个bash数组,说:

arr1=( 1 2 3 )
arr2=( 1 2 A )
Run Code Online (Sandbox Code Playgroud)

我想使用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' )"
Run Code Online (Sandbox Code Playgroud)

所需的输出将是预期的diff -y,如果我将数组存储到文件 a 和 b 中,我会得到:

diff a b
 1        1
 2        2
 3      | A
Run Code Online (Sandbox Code Playgroud)

(减少可读性的空间)

出于速度原因,我想避免编写中间文件,尽管我知道tmpfs伪文件是基于 RAM 的解决方法。

iru*_*var 9

使用printf过程替换

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

  • “我不会有带空格的元素。” &lt;- 著名的遗言! (5认同)
  • @Fiximan,您的 `tr` 管道将因任何包含空格的数组元素而中断。`printf` 是打印数组每行一个元素的惯用方式。 (3认同)