Quantcast
Channel: Bashタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 2811

bashで参照変数(変数の変数)の値が設定されているかの判定

$
0
0
目的 変数で変数を定義したいことがあります。これを参照変数と呼ぶとすると、元の変数で参照先の変数が設定されているかを判定できるか?の記事です。 探してもすぐに出てこなかったので自分で試しました。 環境 bash --version GNU bash, バージョン 5.1.0(1)-release (x86_64-apple-darwin18.7.0) ... 変数の値に変数名の定義 # 変数hogeの値はfooでこれが変数名になっている hoge=foo # 2つ目の変数(foo)を参照変数と呼ぶことにします。 foo=bar # hogeから参照変数(foo)の値にアクセスする ## 方法1 eval echo '$'$hoge # -> boo ## 方法2 echo ${!hoge} # -> boo 参照変数(foo)に値がない場合の振る舞い # 変数のクリア unset foo # 未定義変数でエラーとする set -u echo ${!hoge} # -> -bash: !hoge: 未割り当ての変数です # scriptで組んでいると止まってしまいます。 参照変数の判定 bashには[ -z ${hoge} ]とかが出てくるのですが、参照された変数が未定義かどうかわかりませんでした。少なくとも[ -z ${!hoge} ]ではうまくいきません。 そこでbashの-vオプションを使います。 unset foo # 変数(hoge)の設定判定は$なしの変数名(hoge)でチェックします [ -v hoge ] && echo 'Y' || echo 'N' # -> Y # 変数(hoge)の値が示す参照変数(foo)の設定判定は$ありの変数名($hoge)でチェックします [ -v $hoge ] && echo 'Y' || echo 'N' # -> N # 再設定します。 foo=bar [ -v $hoge ] && echo 'Y' || echo 'N' # -> Y # できました。 結論 bashの-vのオプションで$hogeで参照変数の設定判定ができました。 どなたかのお役に立てれば嬉しいです。

Viewing all articles
Browse latest Browse all 2811

Trending Articles