1. ホーム
  2. bash

[解決済み] unset の使用と変数への空の設定

2022-05-16 10:06:42

質問

私は現在bashのテストフレームワークを書いています。テスト関数の中で、両方の標準的なbashのテスト( [[ ) だけでなく、定義済みのマッチャーも使用することができます。マッチャーは '[[' のラッパーで、リターンコードを返す以外に、何が期待されたかを示す何らかの意味のあるメッセージを設定します。

string_equals() {
    if [[ ! $1 = $2 ]]; then
            error_message="Expected '$1' to be '$2'."

            return 1
    fi
}

そのため、マッチャーを使用して失敗した場合のみ、error_messageが設定されます。

さて、後のある時点で、テストが成功したかどうかをテストしています。成功した場合は緑で、失敗した場合は赤で期待値を表示します。

さらに、error_messageが設定されているかもしれないので、メッセージが存在するかどうかをテストし、それを表示し、それから設定を解除します(次のテストでは、error_messageが設定されないかもしれないので)。 error_message ):

if [[ $error_message ]]; then
    printf '%s\n' "$error_message"

    unset -v error_message
fi

そこで質問なのですが、この変数を解除するのが良いのか、それとも、次のように''に設定するのが良いのでしょうか?

error_message=''

どちらが良いのでしょうか?実際に違いがあるのでしょうか?それとも、メッセージが設定されたことを示す追加のフラグを用意した方がいいのでしょうか?

どのように解決するのですか?

を使用していない限り、ほとんどの場合、違いは見られません。 set -u :

/home/user1> var=""
/home/user1> echo $var

/home/user1> set -u
/home/user1> echo $var

/home/user1> unset var
/home/user1> echo $var
-bash: var: unbound variable

というわけで、実際には、変数をどのようにテストするかによります。

セットされているかどうかをテストするための私の好ましい方法は、次の通りであることを付け加えます。

[[ -n $var ]]  # True if the length of $var is non-zero

または

[[ -z $var ]]  # True if zero length