質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
UNIX

UNIXとは、AT&Tのベル研究所で開発されたコンピューター用のマルチユーザー・マルチタスクのオペレーションシステム(OS)です。政府や教育機関や研究所で広範囲に採用されています。

csh

cshは、C言語スタイルの構文を持つUNIX系OSのシェルの1つのことです。

Q&A

解決済

1回答

1032閲覧

【csh】C-SHELLの$?使用法について

katsura06

総合スコア11

UNIX

UNIXとは、AT&Tのベル研究所で開発されたコンピューター用のマルチユーザー・マルチタスクのオペレーションシステム(OS)です。政府や教育機関や研究所で広範囲に採用されています。

csh

cshは、C言語スタイルの構文を持つUNIX系OSのシェルの1つのことです。

0グッド

0クリップ

投稿2021/04/14 02:42

仕事で既存のコードを読んでいて分からなかったので質問させて下さい。

以下のようなコードが書かれています。

・test.csh

csh

1#!/bin/csh -f 2 3echo "開始しました。" 4source param.par 5 6if ( $?STR_FLG ) then 7 echo "if文の中に入りました" 8end if 9 10exit 0

•param.par

csh

1setenv STR_FLG YES

これを実行すると、以下のようになります。

./test.csh
開始しました。
if文の中に入りました

ここで質問なのですが、なぜif文の中に入ることができているのでしょうか?
$?はネットで調べると、特殊変数で「シェルが最後に実行したコマンドの終了状態を保持している。ほとんどのコマンドは成功時には「0」を返す」となっていますが、これでなぜif文の中に入るのかが分かりません。

ご回答お待ちしております。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dodox86

2021/04/14 05:57

> if ( $?STR_FLG ) then > echo "if文の中に入りました" > end if if文を閉じるのは「end if」ではなく「endif」です。スクリプトの実行時、文法エラーになりませんでしたか?
katsura06

2021/04/15 07:20

失礼しました。転記ミスです。
guest

回答1

0

ベストアンサー

$?はネットで調べると、特殊変数で「シェルが最後に実行したコマンドの終了状態を保持している。

$?がシェルが最後に実行したコマンドの終了コードを示すのは、主にBourne shell, BashなどのBシェル系でのお話です。cshやtcshなどCシェル系では$?はそれに続くnameと共に「$?name」として扱い、nameが設定されているときは文字列1で置き換えられ、設定されていないときは文字列0で置き換えられるようになります。

以下はtcshのman(1)ページですが、$?nameに関してはcshでも同様です。
TCSH man(1) - FreeBSD jpman projectより

csh

1% 2% setenv STR_FLG YES 3% echo $?STR_FLG 41 5% unsetenv STR_FLG 6% echo $?STR_FLG 70 8%

つまり、変数STR_FLGが設定されているのでif文の評価が真になり、thenの処理が実行されます。

投稿2021/04/14 05:49

dodox86

総合スコア9183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

katsura06

2021/04/15 07:22

ご回答ありがとうございました。 とても分かりやすく、よく理解できました。 もっとよく勉強しようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問