我从以下方面得到了意想不到的结果
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
您已告诉 shell 进行中记录的那种评估man test
它可能与该手册页不完全匹配,因为[
它内置于大多数 shell,并且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