Bash で、変数名とその中の値を同時に表示する関数(declare -p みたいなの)を書いてみました。
コード
単刀直入に、こんな感じ。
print_var()
{
[ -n "$1" ] && printf "%7s : %s\n" "$1" ${!1:-(null)}
}
ポイント
-
${!1}
の部分で、第1引数の間接展開(indirect expansion)しています。bash でない場合は$(eval echo '$'$x)
とかしないといけないですが、!
だけで済む Bash は便利ですね! -
:-(null)
の部分で、間接展開の結果が空だった場合、"(null)" という文字列を代わりに利用しています。
実行してみる
以下のスクリプトを実行してみました。
print_var.sh
# !/bin/bash
print_var()
{
[ -n "$1" ] && printf "%7s : %s\n" "$1" ${!1:-(null)}
}
print_var
print_var some_var
some_var=4
print_var some_var
結果
$ ./print_var.sh
some_var : (null)
some_var : 4
期待通り、動作しているようです。