This question already has answers here:
Compare/Difference of two arrays in bash
(7个答案)
三年前关闭。
我有两张单子:
tagged=(a-01 a-02 a-03 a-04 a-06)
merged=(a-01 a-02 a-05)

我正在寻找一个bash解决方案来只打印那些在tagged列表中但不在merged中的元素。
我一直在尝试遍历这两个列表,但都失败了。
我坚信巴什有办法解决这个问题。

最佳答案

您可以将grep -vf与进程替换一起使用:

tagged=(a-01 a-02 a-03 a-04 a-06)
merged=(a-01 a-02 a-05)

grep -vf <(printf "%s\n" "${merged[@]}") <(printf "%s\n" "${tagged[@]}")

a-03
a-04
a-06

要将结果存储在数组中,请执行以下操作:
diffarr=($(grep -vf <(printf "%s\n" "${merged[@]}") <(printf "%s\n" "${tagged[@]}")))

declare -p diffarr
declare -a diffarr='([0]="a-03" [1]="a-04" [2]="a-06")'

08-28 10:47