Bash Shell - 変数が定義されているかどうかを確認する方法

LinuxのBashシェルスクリプトでは、変数が定義されているかどうかを確認する方法を紹介します。

いくつかの変数にアクセスするとき、その変数が定義されていなくて ""が出力されるのか、実際の値が ""で割り当てられたかどうかを区別ならないことがありますが。 このようなときに変数が定義されていることを確認して知ることができます。

Syntax

変数が定義されているかどうかを確認するテスト演算子は -v-zです。

[[ -v Variable_Name ]]  

[[ -z Variable_Name ]]  
  1. -v:変数が定義されているときにTrue、そうでなければFalseリターン
  2. -z:変数が定義されているときにFalse、そうでなければ、Trueリターン

1. -vで変数定義を確認する

次のように -v演算子で変数が定義されているかどうかを確認することができます。

#!/bin/bash

VAR="variable"

if [[ -v VAR ]];  
then  
  echo "VAR is set"  
else  
  echo "VAR is not set"
fi

if [[ -v VAR2 ]];  
then  
  echo "VAR2 is set"
else  
  echo "VAR2 is not set"
fi

Output:

$ bash example.sh
VAR is set
VAR2 is not set

2. -zで変数定義を確認する

次のように -zに変数が定義されているかどうかを確認することができます。ファイルが存在するとき、 -vと戻り値が反対ということに注意をください。

#!/bin/bash

VAR="variable"

if [[ -z ${VAR} ]];  
then  
  echo "VAR is not set"  
else  
  echo "VAR is set"
fi

if [[ -z ${VAR2} ]];  
then  
  echo "VAR2 not is set"
else  
  echo "VAR2 is set"
fi

Output:

$ bash example.sh
VAR is set
VAR2 is not set

3. unsetで変数定義が削除されることを確認する

unsetは宣言された変数を削除するコマンドです。

たとえば、次の例ではVARは定義されて -vにチェックしてみると設定されてきます。その変数に対してunsetをして、再度チェックしてみるとVARは定義されていないと返されます。

#!/bin/bash

VAR="variable"

if [[ -v VAR ]];  
then  
  echo "VAR is set"  
else  
  echo "VAR is not set"
fi

unset VAR

if [[ -v VAR ]];  
then  
  echo "VAR is set"  
else  
  echo "VAR is not set"
fi

Output:

$ bash example.sh
VAR is set
VAR is not set

References

codechachaCopyright ©2019 codechacha