我有两个变量输入:
VAR1="abc red blue cat empty dummy rummy"
VAR2="rummy zero empty rat cat reverse"
输出:我想要如下输出:(从$VAR2
in 中删除常见的$VAR1
)
abc red blue dummy
我尝试如下:
for i in $VAR1
do
for j in $VAR2
do
if [ $i != $j ]; then
echo $i;
fi
done
done
在这里,if [ $i == $j ]; then echo $i
我得到了完美的输出,cat empty rummy
但是我需要得到除这些之外的输出。
答案1
尝试:
a=()
for i in $VAR1; do
found=
for j in $VAR2; do
if [ $i == $j ]; then
found=1
break
fi
done
if [ ! $found ]; then
a+=($i)
fi
done
echo ${a[*]}
换句话说:对于每个i
in VAR1
,将其与每个j
in进行比较VAR2
。如果未找到匹配项,则添加i
到输出。
这个版本假设了字符,VAR1
并且VAR2
不会混淆 shell。此外,它在二次时间中运行效率很低,但这也许不是问题。
更快,使用关联数组:
declare -A a2
for k in $VAR2; do
a2[$k]=1
done
for k in $VAR1; do
if [ ! "${a2[$k]}" ]; then
echo $k
fi
done