2012-10-05 12 views
11

私は$?はここで何を意味するのでしょうか?

if [ $val -eq $? ] 

、のような文が含まれているシェルスクリプトに出くわしましたか

+0

[ここにあなたの答えがある] [1]あなたに一致する可能性がある を問う[1]:http://stackoverflow.com/questions/7101995/what-does-if-eq-0- shell-scripts?answerertab = active#tab-top –

+0

[ドル記号の特別なシェル変数とは何ですか?](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は同じ結果を生じることになります。意味は、現在のディレクトリに拡張子を持つ0個以上のファイルを示します。

echo $?は終了ステータスを表示します。最後のコマンドから少なくとも1つのファイルが表示された場合、終了ステータスはゼロ(成功)になります。

+0

正しくはありません: 'ls *。*'は現在のディレクトリの内容をフィルタリングし、ピリオドを含むファイルとディレクトリだけを表示します。ディレクトリの場合、コンテンツを表示します(実装によって異なる場合があります)。また、次のコマンドを見てください。 'mkdir test && cd test && ls; echo" $? "'は0を返します。しかし 'mkdir -m -r wo_dir && cd wo_dir && echo" test "> 1.txt && ls; echo" $? " 'はファイルが作成されていてもls:。:Permission deniedというメッセージとともに1を返します。 – artdanil

関連する問題