Bash変数の初期化 - 必要に応じて必須、推奨、または定義されますか?

Bash変数の初期化 - 必要に応じて必須、推奨、または定義されますか?

スクリプトでbash変数の値を初期化する(メインコードの前)、関数のローカル変数に実際の値を割り当てる前に初期化することの利点/欠点はありますか?

次の作業を行う必要がありますか?

init()
{
    name=""
    name=$1
}

init "Mark"

(初期化されていない場合)ゴミ値で変数を初期化し、変数値に悪影響を及ぼす危険はありますか?

ベストアンサー1

空の文字列を変数に割り当て、すぐに別の変数文字列を割り当てても利点はありません。シェル変数に値を割り当てると、以前の値が完全に上書きされます。

私が知る限り、変数を空の文字列で明示的に初期化する必要があるという提案はありません。実際にこれを行うと、場合によってはエラーが隠れることがあります。以下で実行するとエラーが明らかになりますset -u。下記をご覧ください。

設定されていないか、スクリプトが起動されてから使用されていないか、unset -vコマンドを実行して明示的に設定解除された変数には値がありません。そのような変数の値は 0 になります。として使用すると"$myvariable"同等のものが得られ、""「ジャンクデータ」は決して得られません。

シェルオプションがまたはnounsetに設定されている場合、未設定の変数を参照すると、シェルでエラーが発生し、非対話型シェルが終了します。set -o nounsetset -u

$ set -u
$ unset -v myvariable
$ echo "$myvariable"
/bin/sh: myvariable: parameter not set

またはbash:

$ set -u
$ unset -v myvariable
$ echo "$myvariable"
bash: myvariable: unbound variable

名前が既存の環境変数に対応する場合、シェル変数は環境によって初期化されます。

環境によってこのように初期化できる変数を使用したい場合(必要でない場合)、スクリプトの主要部分の前に明示的に設定を解除できます。

unset -v myvariable    # unset so that it doesn't inherit a value from the environment

...これにより、環境変数からも削除されます。あるいは、単に初期値を無視して割り当てで上書きすることもできます(これにより、環境変数の値も変更されます)。

シェル変数では、初期化されていないゴミは決して発生しません(上記のように、ゴミが同じ名前の環境変数にすでに存在しない限り)。

おすすめ記事