두 가지 변수 입력이 있습니다.
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
쉘을 혼동하지 않습니다. 또한 2차 시간에서는 매우 비효율적으로 실행되지만 문제가 되지 않을 수도 있습니다.
더 빠르게, 사용하세요연관 배열:
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