プロが教えるわが家の防犯対策術!

次のようなソースコードですが、

  cmd = "ls -l"
  system(cmd)
  if $?.exitstatus == 1

$? の意味がよく分からないのです。
教えて頂けるでしょうか。

A 回答 (4件)

>Rubyの本に、「$」はグローバル変数の指定として、次のような複数の扱い方があります。



本の名前が書いてありませんが、入門書ですかね。入門書には全部書いてないことも多いですよ。
わからないことがあったらマニュアルを見る習慣をつけましょう。

マニュアルの $? の説明部分には、$? には、nilもしくはProcess::Status 型のオブジェクトが入っていると書いてあります。
従って、$? の使い方はマニュアルのProcess::Statusのクラスの説明の所を見てください。
    • good
    • 0
この回答へのお礼

ご教示頂き有難うございました。

お礼日時:2013/05/07 13:21

そういうことでしたら



$で始まるものはグローバル変数なのですが、最初から定義されている特殊変数というものがあります。$?もその一つで、他にもあります。これらはいろんな情報を参照したり設定したりするものです。
今後も出てくると思うので、先程のサイトなどで確認するとよいです。

この回答への補足

Rubyの本に、「$」はグローバル変数の指定として、次のような複数の扱い方があります。
1) 文字列処理関連:
 「$_」、「$<」、「$.」、「$/」、「$\」、「$,」、「$;」、「$F」、
2) パタンマッチング関連:
「$~」、「$&」、「$'」、「$+」、
3) コマンドライン関連
「$-a」、「$-i」、「$-l」、「$-p」、「$-W」、
しかし、「$?」だけの説明は今まで見つからなかったのです。
恐らく直前の処理を指していると思います。どのように定義されているか、正しい使い方を知りたくて質問に出したのです。

補足日時:2013/04/24 11:50
    • good
    • 0

これは、shellスクリプト等を触っていればよく出てくるし、それ以外でもよくある話なのですが、あるプログラムが終了すると、それが正常終了したか、異常終了したか終了後にほかのプログラムに知らせるリターンコードっていうのがあります。



まず最初に、cmdには"ls -l"がはいってます。
こいつを、systemつまり、OSに食わせるわけです(厳密にはちょっと違うと思いますがね。この説明)。
で、そいつが正常終了すれば、0。異常終了すれば0以外を返します。

…ふつうは。
ふつうはそういう設計になっているはずです。
歴史的に、正常終了は0なのです。

もしそれの由来とかどなたかご存じでしたらお教えねがいたいんですが。

ともかく、異常終了したら、1が返ってくる場合が殆どです。
これを条件のif文で分岐させるんです。
    • good
    • 0
この回答へのお礼

ご丁寧に解説していただいて有難うございます。
「$?.exitstatus」は system(cmd) 実行の戻り値ですね。
しかし、「$?」はどのように定義されたのでしょうか。
$?.exitstatus の他に、使い方の例を教えて頂けたら助かります。

お礼日時:2013/04/24 12:05

http://doc.ruby-lang.org/ja/
http://doc.ruby-lang.org/ja/1.9.3/doc/spec=2fvar …
http://doc.ruby-lang.org/ja/1.9.3/class/Kernel.h …

マニュアルに明記されていますが、これらを読んだ上で分からないのでしょうか?
    • good
    • 0
この回答へのお礼

Rubyは最近から他人のコードを読みながら勉強しています。
分からない時はマニュアルを探しながら理解しています。
教えてもらったリンクは初めて見た「$?」のページです。
有難うございました。

お礼日時:2013/04/24 09:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!