空の文字列を変数に割り当て、すぐに別の変数文字列を変数に割り当てることには利点がありません。シェル変数に値を割り当てると、以前の値が完全に上書きされます。
私の知る限りでは、変数を空の文字列に明示的に初期化する必要があるという推奨はありません。実際、これを行うと、特定の状況下でエラーがマスクされる場合があります(で実行した場合に明らかになるエラー、set -u
以下を参照)。
設定されていない変数は、スクリプトの開始以降使用されていないか、スクリプトでunset
コマンドを実行して明示的に設定解除されているため、値がありません。そのような変数の値は何もありません。として使用"$myvariable"
すると""
、と同等の結果が得られ、「ガベージデータ」を取得することはありません。
シェルオプションnounset
がまたはのいずれset -o nounset
かset -u
で設定されている場合、未設定の変数を参照すると、シェルでエラーが発生します(非インタラクティブシェルは終了します)。
$ set -u
$ echo "$myvariable"
/bin/sh: myvariable: parameter not set
または、中bash
:
$ set -u
$ echo "$myvariable"
bash: myvariable: unbound variable
変数の名前が既存の環境変数に対応する場合、シェル変数は環境によって初期化されます。
この方法で環境によって初期化される可能性のある変数を使用していると予想される場合(そしてそれが望ましくない場合)、スクリプトの主要部分の前に明示的に設定を解除できます。
unset myvariable # unset so that it doesn't inherit a value from the environment
環境変数としても削除されます。または、初期値を無視して、割り当てで上書きするだけです(環境変数の値も変更されます)。
シェル変数で初期化されていないガベージに遭遇することは決してありません(述べられているように、そのガベージが同じ名前で環境変数にすでに存在していた場合を除きます)。