If 语句对两个 cmp 结果给出“else”响应

Jim*_*Jim 0 shell-script test

我从以下方面得到了意想不到的结果

COMPARE(){
    if [ ! cmp $IPPATH/ip.old $IPPATH/ip.new >/dev/null 2>&1 ]; then
            echo compare going to create
            CREATE
    else
            echo same
    fi
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试比较文件,如果它们相同,则什么都不做(即 display same,但如果它们不相同,则显示compare going to create然后运行该CREATE函数。

但是,same当文件相同并且它们绝对不相同时,我得到相同的“ ”结果。

这些显示正确(应该如此):

echo `cat $IPPATH/ip.old`
echo `cat $IPPATH/ip.new`
Run Code Online (Sandbox Code Playgroud)

Ste*_*ris 7

测试中的[字符if意味着您已经告诉 shell 进行记录在man test

因为它可能不完全匹配的手册页[是内置于大多数贝壳kshbashzsh等可以实现略有不同的功能。

但是,它们不会做的一件事是运行外部命令并测试结果。

所以我们可以用另一种方式做到这一点

例如,我们可以测试cmp命令的输出是否为非空白:

if [ -n "$(cmp $IPPATH/ip.old $IPPATH/ip.new)" ]
then
  echo different
else
  echo same
fi
Run Code Online (Sandbox Code Playgroud)

或者我们可以调用cmp并测试返回代码,它更接近您的原始意图,只是没有[...]包装:

if ! cmp $IPPATH/ip.old $IPPATH/ip.new > /dev/null 2>&1
then
  echo different
else
  echo same
fi
Run Code Online (Sandbox Code Playgroud)