2017年2月23日

変数の値を変数名として使いたい場合は?(evalコマンド)

例えば、変数distroにはディストリビューション名が、変数ubuntuにはバージョン番号が格納されているとします。

$ echo $distro
ubuntu
$ echo $ubuntu
16.04

このとき、変数distroに入っている値(ubuntu)を変数名とする変数($ubuntu)の内容を参照したい場合は、どうすればよいでしょうか。以下の例はうまくいきません。

$ echo "$$distro"
2distro

変数「$$」は、実行したコマンド(この場合はechoコマンド)自身のPIDを表す特殊変数です。都合良く「$ $distro」→「$ ubuntu」のような順で展開してくれません。

このような時は、引数を評価するevalコマンドを使います。

$ eval echo '$'$distro
16.04

最初の$記号が単一引用符で囲まれているのは、evalコマンドの実行時に展開されてしまわないようにするためです。evalコマンド実行後は「echo $ubuntu」のようになり、変数ubuntuの内容が表示されます。



0 件のコメント:

コメントを投稿