我有两个清单:
tagged=(a-01 a-02 a-03 a-04 a-06)
merged=(a-01 a-02 a-05)
我正在寻找一个bash解决方案,只打印tagged
列表中但不在merged
((a-03 a-04 a-06)
)中的元素。
我一直试图迭代这两个列表,但我失败了。 我坚信bash有一些偷偷摸摸的方式来解决它。
答案 0 :(得分:5)
您可以将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")'