質問

SHコードルックスの多くのように:

$cmd
if [ $? = 0 ]; then $cmd2; fi

の代わりに:

if $cmd; then $cmd2; fi
私は、一般的に、人々は、彼らが、後者の構文が有効であることを認識していないというだけの理由の元を使用することを想定しているが、(頭に浮かぶ唯一の可能性は可搬性であるが)、別の理由がある場合、私は思ったんだけど。明示的に$を{?}参照好むする理由はありますか?ます。

役に立ちましたか?

解決

あなたが実際に何か(ロギング、期待されるエラーを処理する、など)のエラーコードを使用したい場合は、あなたは、参照$?に持っています。あなたが言及していること、特定のシナリオでは、第二if構築物が明確と短いの両方であり、私はそれを使用しない理由を見ない。

他のヒント

私の見解では、多くの人々はあなたが多かれ少なかれ、あなたがそうであるように、コマンドの状態をテストすることができることを認識していませんので。同様に、人々はまた、あなたが書くことができることを認識していません。

if cmd1
   cmd2
   cmd3
then
    ...do this after executing cmd1, cmd2 and cmd3, but ...
    ...only if cmd3 exits with with status 0!
fi

またに(簡潔さのコストで)あなたのコードを簡素化することができます

cmd1 && cmd2

(私はアップ投票してきたコメント、でこれを指摘@shin参照)。

私はまた、使用していることを「ボーン」シェルコードの多くを見ます

if ( ... )
then ...
fi
時には適切である - しかし、ほとんどの場合、それはCシェルプログラマは表記手段はBourneシェルおよびデリバティブに「サブシェルを実行」することを実現していない書いたものである - などKornシェル、POSIX準拠のシェルとして、そしてバッシュます。

<デル>コマンドからの出力をテストとは対照的に、あなたは、コマンドのステータスフラグをテストしているので。

をstdoutにコマンドを印刷する場合、しかし、フラグを設定し、あなたが与えてくれた二つの例と異なる結果を得る取得します。

私はそれをテストした後、修正立っています。 (?kshの下に)私はSolaris上で年前の問題に実行して思い出したと思ったが、私は現在、テストを除くへのアクセスを持っているマシンの下で再作成することはできません。

もし[$cmd

はい、多くの人が後者よりエレガントな形のことは知りません。 私は以前にこのことを述べています: http://www.pixelbeat.org/programming/shell_script_mistakes.htmlする

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top