終了ステータス$を引用する理由はありますか?変える?

終了ステータス$を引用する理由はありますか?変える?

Googleのbashスクリプトスタイルガイドを見て、終了ステータス変数を参照することを確認しました。$? ここ

if [[ "$?" -ne 0 ]]; then
    error_message
fi

戻り値は常に数値であると思いましたが、これを引用する理由は何ですか?

これは単なる良い習慣です(「$ @」のような他の特別なシェル変数を引用したいので)?

答え1

おすすめ

あなたはこれを読むべきです素晴らしい答え詳細については。


数字を含む設定はIFSコードを破損する可能性があります。

$ IFS=0
$ echo test
$ [ $? -eq 0 ] && echo done
bash: [: : integer expression expected

一部のシェルはIFS環境(dash、、 )から継承ashできますが、一部はそうではありません(bash、、、)。しかし、誰かが環境を制御できるので、スクリプトはとにかく中断されるでしょう(そして影響を受けます)。zshksh$#$!

お客様の例では新しいテストを使用した[[...]]ため、フィールド分割がオフになっており、この場合は引用は必要ありません。以前のテストを使用している場合はこれが重要です[...]

$ IFS=0
$ echo test
$ [[ $? -eq 0 ]] && echo done
done

答え2

技術的にはそうではありません。必要引用の左[[ ... ]]。しかし〜に応じてスティーブン・チャジェラスその人のコメントに入れてください。美しい答え、引用しない理由がないので、ちょうど引用し、夜に睡眠をよりよく寝てください。これは推奨される良い方法であり、懸念と質問を減らすことができます。

昔のスタイルで[ ... ]君は〜しなければならない製品見積もり、選択の余地はありません。いずれにせよ、[ ... ]古いスタイルを使用しないでください。新しいスタイルを使用することをお勧めし[[ ... ]]ます。

関連情報