我有2个变量,如此
bigger="a b c d e"
smaller="c a b"
有没有办法在bash脚本中获得设置差异(即d和e)?
订单并不重要。
答案 0 :(得分:1)
模拟集合的一种方法是使用关联数组的键。在这里,我们创建一个关联数组,其键与$bigger
匹配,然后删除$smaller
中显示的任何键:
bigger="a b c d e"
smaller="c a b"
declare -A a
for i in $bigger
do
a["$i"]=1
done
for i in $smaller
do
unset a["$i"]
done
echo "Difference is ${!a[*]}"
以上代码生成输出:
Difference is d e
答案 1 :(得分:1)
您可以使用comm
程序来获取两组值之间的差异。它需要排序输入,因此您必须将值传递给sort
。由于它们要求每个项目都在一个单独的行上,因此您应该首先将空格转换为换行符。您可以使用进程替换和here-strings将字符串提供给程序。
diff=$(comm -23 <(tr ' ' '\n' <<<"$bigger" | sort) <(tr ' ' '\n' <<<"$smaller" | sort))
答案 2 :(得分:1)
使用变量替换
$ echo ${bigger//[${smaller// /}]/}
d e
或
$ echo ${bigger//[$smaller]/}
de