2017-06-02 88 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 #...