我从以下方面得到了意想不到的结果
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)
测试中的[字符if意味着您已经告诉 shell 进行记录在man test
因为它可能不完全匹配的手册页[是内置于大多数贝壳ksh,bash,zsh等可以实现略有不同的功能。
但是,它们不会做的一件事是运行外部命令并测试结果。
所以我们可以用另一种方式做到这一点
例如,我们可以测试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)