本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、文字列を評価、連結して実行する「eval」コマンドです。
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、文字列を評価、連結して実行する「eval」コマンドです。
「eval」コマンドは、指定した文字列を評価後に連結して、現在のシェルに実行させます。主にシェルスクリプトや環境設定用のファイルで使用します ※1。
※1 evalコマンドの名前は、evaluate(評価する)に由来する。文字列を評価(展開)した後に実行するからだ。evalはシェルに組み込まれたビルトインコマンド。
eval [文字列 ……]
※[ ]は省略可能な引数を示しています。
evalコマンドにはオプションがありません。
「eval 文字列」で文字列をコマンドとして実行します。「eval 文字列1 文字列2 ……」のように文字列を複数指定した場合、スペースをはさんで連結後、シェルに実行させます。
例えば「eval echo hello」であれば、現在のシェルで「echo hello」を実行します。複数のコマンドを続けて実行したい場合は「;」で区切ります。
evalコマンドが威力を発揮する場面は2つあります。1つはあるコマンドが出力した文字列自体をコマンドとして実行すること、もう1つは(入れ子になった)変数を評価することです。
あるコマンドが出力した文字列をコマンドとして実行する例を紹介します。例えば「dircolors」コマンドは、設定ファイルを読み込んで、環境変数LS_COLORSを設定するための文字列(コマンド)を出力します ※2。
「eval `dircolors -b /etc/DIR_COLORS`」のように実行することで、(1)dircolorsコマンドが/etc/DIR_COLORSを読み出して、環境変数LS_COLORSを設定するための文字列を生成し、(2)その文字列をコマンドとして実行できます(画面1)※3。
※2 LS_COLORSはlsコマンドで表示する色を設定する環境変数。詳しくは連載第27回を参照。
※3 dircolorsの-bオプションはbash用という意味。Ubuntuでは、/etc/DIR_COLORSが存在せず、デフォルトでは環境変数LS_COLORSに設定が保存されている。
eval 文字列
(文字列をコマンドとしてシェルに実行させる)
eval `dircolors -b /etc/DIR_COLORS`
(「dircolors -b /etc/DIR_COLORS」の実行結果を現在のシェルで実行する)(画面1)
画面2は変数を評価した例です。「echo $PS1」(プロンプトの表示形式を持つシェル変数PS1の表示)と「ps --forest」(プロセスの階層表示)を実行しています ※4。
※4 psコマンドの結果から、現在のシェルで文字列部分を実行していることが分かる(連載第169回を参照)。
なお、evalの実行時点で$PS1の部分を展開しないようにするため、「echo '$PS1'」のようにシングルクオーテーションで変数をくくるか、「echo \$PS1」のように「$」の直前にバックスラッシュを付けてエスケープする必要があります。
さらに「eval $変数名」で、変数の内容をコマンドとして実行できます(画面3)。
eval $変数名
(変数の内容をコマンドとしてシェルに実行させる)
eval $SHELL --version
(「/bin/bash --version」を実行。/bin/bashは変数SHELLの内容)(画面3)
「eval '$'$変数名」で、「変数の内容」を変数名として参照できます。シングルクオーテーションの位置に注意してください。
例えば変数ver1に文字列seagullをセットし、変数targetに文字列ver1をセットしたとしましょう。
「eval echo '$'$target」で「echo $ver1」を実行できます(画面4)。また、「eval ls '$'$target」では「ls seagull」を実行します。
西村 めぐみ(にしむら めぐみ)
PC-9801NからのDOSユーザー。PC-486DX時代にDOS版UNIX-like toolsを経てLinuxへ。1992年より生産管理のパッケージソフトウェアの開発およびサポート業務を担当。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『Accessではじめるデータベース超入門[改訂2版]』『macOSコマンド入門』など。2011年より、地方自治体の在宅就業支援事業にてPC基礎およびMicrosoft Office関連の教材作成およびeラーニング指導を担当。
Copyright © ITmedia, Inc. All Rights Reserved.