2012-10-05 34 views
11

我碰到一個包含如下語句shell腳本,

if [ $val -eq $? ] 

是什麼意思$?這裏?

+0

[這裏是你的答案] [1]可以匹配你的問題 [1]:http://stackoverflow.com/questions/7101995/what-does-if-eq-0- shell-scripts?answertab = active#tab-top –

+0

可能重複[什麼是特殊的美元符號shell變量?](http://stackoverflow.com/questions/5163144/what-are-the-special -dollar-sign-shell-variables) – hammar

回答

17
$? 

返回最後完成的命令的狀態。 狀態0告訴你,一切都完成了。

另外$標誌是一個特殊的符號 - 在這種情況下,$val提取由變量val

2

這是上一個命令的退出狀態的值。如果成功,這是0

3

什麼$實際持有的價值?在這裏呢?

$?是的出口狀態的最後結果... 0是默認的「全成」

bash# ls *.* 
bash# echo $? 
bash# 0 
bash# ls /tmp/not/existing/ 
bash# echo $? 
bash# 2 
17

$# =參數的數目。答案是3

[email protected] =通過了什麼參數。答案是1 2 3

$? =最後命令成功。答案是0這意味着'是'。

+0

也許它不應該打擾我,但「0 == True」這個事實真的磨礪了我的裝備。 – jmracek

12

我發現link是非常有用的,是最好的答案。它包括與樣本清楚地表達。

enter image description here

-1

ls *.*ls會產生相同的結果。含義在當前目錄中顯示具有任何擴展名的零個或多個文件。

echo $?會顯示退出狀態。如果最後一條命令至少顯示一個文件,則退出狀態將爲零(成功)。

+0

不完全正確:'ls *。*'會過濾當前目錄的內容,只顯示帶有句點的文件和目錄;對於目錄它將顯示內容(可能取決於實現)。同樣看下面的命令'mkdir test && cd test && ls; echo「$?」'會返回0.但是,'mkdir -m -r wo_dir && cd wo_dir && echo「test」> 1.txt && ls; echo「$?」 '即使文件被創建,也會返回1,並且消息'ls:。:Permission denied'。 – artdanil

相關問題