예상치 못한 결과를 얻었습니다.
COMPARE(){
if [ ! cmp $IPPATH/ip.old $IPPATH/ip.new >/dev/null 2>&1 ]; then
echo compare going to create
CREATE
else
echo same
fi
}
파일을 비교하려고 하는데 파일이 동일하면 아무 작업도 수행하지 않지만(예: display same
) 동일하지 않으면 표시 compare going to create
한 다음 CREATE
함수를 실행합니다.
그러나 same
파일이 동일할 때와 확실히 동일하지 않을 때 동일한 "" 결과를 얻습니다.
다음은 올바르게 표시됩니다(원하는 대로).
echo `cat $IPPATH/ip.old`
echo `cat $IPPATH/ip.new`
답변1
[
테스트의 문자는 if
기록되는 종류의 평가를 수행하도록 쉘에 지시했음을 의미합니다.man test
[
이는 대부분의 쉘에 내장되어 있으며 약간 다른 기능을 구현할 ksh
수 있으므로 해당 매뉴얼 페이지와 정확히 일치하지 않을 수 있습니다 .bash
zsh
그러나 이것이 수행하지 않는 한 가지는 실행입니다.외부명령을 내리고 결과를 테스트합니다.
그러니 우리는 다른 방법으로 할 수 있어요
cmp
예를 들어, 명령의 출력이 비어 있지 않은지 테스트할 수 있습니다 .
if [ -n "$(cmp $IPPATH/ip.old $IPPATH/ip.new)" ]
then
echo different
else
echo same
fi
또는 cmp
래핑 없이 원래 의도에 더 가까운 반환 코드를 호출하고 테스트 할 수 있습니다 [...]
.
if ! cmp $IPPATH/ip.old $IPPATH/ip.new > /dev/null 2>&1
then
echo different
else
echo same
fi