在bash中设置字符串中2个变量之间的差异

时间:2015-07-31 00:20:03

标签: bash shell

我有2个变量,如此

bigger="a b c d e"
smaller="c a b"

有没有办法在bash脚本中获得设置差异(即d和e)?

订单并不重要。

3 个答案:

答案 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