2つの変数入力があります。
VAR1="abc red blue cat empty dummy rummy"
VAR2="rummy zero empty rat cat reverse"
出力:次の出力が必要です。 ($VAR2
inからcommonを削除する$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
すべてのinとj
比較しますVAR2
。一致するものがない場合は、i
出力に追加します。
このバージョンは文字を想定し、VAR1
シェルVAR2
を混同しません。また、二次時間では非常に非効率的に実行されますが、問題にならない可能性があります。
より速く、使用してください連想配列:
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