Bash:在if语句中返回代码导致意外行为

时间:2017-06-02 19:24:51

标签: bash cmp

我使用cmp命令检查两个文件是否相同。我想将命令粘贴到一行if语句中,但它没有按预期工作。当比较两个文件和一个文件不存在时,cmp返回2.由于2非零,我希望if语句评估为true,但它没有,我不会&#39不明白为什么。

我想写一些类似的东西:

if cmp -s tickets.txt tickets_orig.txt; then
  #do stuff here
fi

因为我发现它简短,甜美,更直观。这可能吗?

我能够使用$?创建一个变通方法,但我不明白为什么下面的代码将评估为true,并且当命令返回2时,上面的代码将评估为false:

cmp -s tickets.txt tickets_orig.txt
if [ $? -ne 0 ]; then
  #do stuff here
fi

1 个答案:

答案 0 :(得分:3)

退出状态($?)= 0表示shell逻辑成功,它允许为正常状态定义不同的错误代码1到127

if command; then #...

相当于

command;
if [ $? -eq 0 ]; then #...

command;
if [ $? -ne 0 ]; then #...

相当于

if ! command; then #...