2017-06-02 53 views
0

我使用的是使用cmp命令检查两个文件是相同的返回码。我想将这个命令粘贴到一条语句中,但它不能按预期工作。当比较两个文件,一个文件不存在,cmp回报2。由于2是非零的,我希望if语句,以评估为真,但它不,我不明白为什么。击:在if语句会导致意外的行为

我想写类似:因为我觉得它很短,甜,更直观

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

。这可能吗?

我能够利用$?创建变通但我不懂为什么低于代码评估真以上代码将值为false当命令返回2:

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

“自2是非零的,我希望if语句,以评估为真” - '0'表示击成功。你的'if'块只会在文件完全相同的情况下执行。反转条件:“如果! cmp -s tickets.txt tickets_orig.txt;然后...' – 0x5453

回答

3

退出状态($)= 0意味着在壳逻辑成功,它允许1定义不同的错误代码,以127 anormal状态

if command; then #... 

相当于

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

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

相当于

if ! command; then #...