注:このサイトで単一のシェル変数をテストする方法については、多くの質問があります。この質問は、未定義の変数のスクリプトをテストすることに関するものです。bashで未定義の変数をエラーとして扱うにはどうすればよいですか?
あなたは実行時エラーを見ずにbashで未定義の変数を使用することができます。
#!/bin/bash
echo ${UNDEF_FILE}
ls -l ${UNDEF_FILE}
exit 0
私はこの非常にエラーが発生しやすいことがわかりました。大きなスクリプトで変数の名前を変更したり、その変数を削除したい場合は、以前のすべての古い参照がスクリプトにエラーを引き起こします。ときどきこれはデバッグするのが明白でないか、または遅すぎることがわかります。
これはなぜ許可されていますか?未定義の変数にフラグを立てる方法はありますか?
「なぜ」は1970年代のシェルとの互換性に戻ります。ベストプラクティスを気にするならば、履歴とは対照的に、スタンドアロンツールとしてダウンロードできるhttp://shellcheck.net/(静的チェック)(https://github.com/koalaman/shellcheck) - ここにあなたの友人です。 –
正に、定義されていない変数の拡張を誤ってしまうと、多くの共通の慣用表現が壊れてしまいます。 '[[$ var]]&{echo" $ varで何かする "; } 'set -u'で壊れます:' set -e'(これはチェックされていない失敗や失敗の条件として使われる)とは異なり、 'set -u'は*すべての*参照を未定義の変数エラー。 –
(ちなみにall-caps変数名は、シェルやオペレーティングシステムにとって意味のある環境変数のためにPOSIXによって定義されたスペースにあります;少なくとも1つの小文字を含む変数の名前空間はアプリケーション用に予約されています。後者を上書きする環境変数で名前を共有するシェル変数を設定するために、環境変数だけでなく、すべてのシェル変数に) –