2015-12-30 134 views
1

我試圖做一個簡單的檢查,如果最後一個表達式是成功的:

if [ $? -ne 0 ]; then 
    chrome a.html 
fi 

這種形式的作品。但是,當我嘗試做:

if [ $? != "0" ]; then 
    chrome a.html 
fi 

或不帶「」,它總是執行。我不知道爲什麼會發生這種情況,如下所示:

if [ $(id -u) != "0" ]; then 
#You are not the superuser 
echo "You must be superuser to run this" >&2 
exit 1 
fi 

我會認爲$?和$(id -u)都返回一個整數,因此比較!=「0」和-ne 0應該都可以工作。但是,它似乎$?與$(id -u)不同。任何解釋?

+0

'$?'是上次執行的命令的退出代碼而不是'id -u'的輸出 – anubhava

+0

是的我知道,我只是使用$(id -u)作爲比較,因爲它返回一個數字以及$? – mtveezy

+0

你應該圍繞你的變量「補償變量擴展,否則你可能會遇到一些問題。」 – Lando

回答

1

我沒有看到你的行爲描述:

#!/bin/bash 
false 
echo false returns $? 
false 
if [ $? -ne 0 ] ; then 
     echo 'testing return -ne 0' 
fi 

false 
echo false returns $? 
false 
if [ $? != "0" ] ; then 
     echo 'testing return != "0"' 
fi 

true 
echo true returns $? 
true 
if [ $? != "0" ] ; then 
     echo 'testing return != "0"' 
fi 
echo done 
exit 0 

產量:

false returns 1 
testing return -ne 0 
false returns 1 
testing return != "0" 
true returns 0 
done 
0

我相信這是因爲$?以整數形式返回輸出,但$(id -u)以字符串的形式返回輸出,而不是整數形式。 -ne運算符用於數字比較,而!=用於字符串比較。在使用!=進行比較時,shell中的比較運算符不夠智能,無法自動將字符串轉換爲整數。

相關問題