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
、、、)。しかし、誰かが環境を制御できるので、スクリプトはとにかく中断されるでしょう(そして影響を受けます)。zsh
ksh
$#
$!
お客様の例では新しいテストを使用した[[...]]
ため、フィールド分割がオフになっており、この場合は引用は必要ありません。以前のテストを使用している場合はこれが重要です[...]
。
$ IFS=0
$ echo test
$ [[ $? -eq 0 ]] && echo done
done
答え2
技術的にはそうではありません。必要引用の左[[ ... ]]
。しかし〜に応じてスティーブン・チャジェラスその人のコメントに入れてください。美しい答え、引用しない理由がないので、ちょうど引用し、夜に睡眠をよりよく寝てください。これは推奨される良い方法であり、懸念と質問を減らすことができます。
昔のスタイルで[ ... ]
君は〜しなければならない製品見積もり、選択の余地はありません。いずれにせよ、[ ... ]
古いスタイルを使用しないでください。新しいスタイルを使用することをお勧めし[[ ... ]]
ます。