#navi(../)
*文字列をコマンドとして実行する・evalコマンド [#s6e0830c]

evalコマンドを利用すると文字列をコマンドとして評価します。~
そもそもevalはあまり使うことはないと思いますが。

以下、evalが不要な例と必要な例を記述します。

#br
#htmlinsertpcsp(linux_ads_top.html,linux-sp.html)

** コマンドだとevalを使用しなくても動作する [#p8c96b9f]
 $ DATE_CMD="date"
 $ $DATE_CMD
 2011年  1月 31日 月曜日 10:10:10 JST

** 変数を変更しコマンドを実行するとエラーとなる [#z424327d]
以下の場合だとエラーとなってしまいます。
 $ DATE_CMD="LANG=C date"
 $ $DATE_CMD
 bash: LANG=C: command not found

** evalにより意図した動作になる [#nb00b440]
このような場合、evalを利用すると意図した動作になります。
 $ DATE_CMD="LANG=C date"
 $ eval $DATE_CMD
 Mon Jan 31 17:55:34 JST 2011

** 文字列評価後にコマンドとして実行する場合 [#ga05031e]
以下、evalを使用した場合と使用しない場合の違いを記述します。~
''注意点としては、evalは変数を評価後、引数の文字列をコマンドとして実行します。''

***evalを使用したサンプルスクリプト [#u0ba032a]
 #!/bin/bash
 for i in 0 1 2
 do
   C=(C zh_CN.utf8 ja_JP.utf8)
   eval echo "C array[$i] is \${C[$i]}"
   LANG=${C[$i]} date
 done

***evalを使用したサンプルスクリプトの結果 [#qae089e2]
 C array[0] is C
 Mon Jan 31 18:24:44 JST 2011
 C array[1] is zh_CN.utf8
 2011年 01月 31日 星期一 18:24:44 JST
 C array[2] is ja_JP.utf8
 2011年  1月 31日 月曜日 18:24:44 JST

eval echo "C array[$i] is \${C[$i]}" の変数が評価され、~
i=0の場合だと、eval echo "C array[0] is ${C[0]}"となり、evalに渡され実行されるので上記の結果になります。

***evalを使用しないサンプルスクリプト [#k7bf18f3]
 #!/bin/bash
 for i in 0 1 2
 do
   C=(C zh_CN.utf8 ja_JP.utf8)
   echo "C array[$i] is \${C[$i]}"
   LANG=${C[$i]} date
 done
***evalを使用しないサンプルスクリプトの結果 [#i2f5b314]
下記の結果の通り、${C[番号]}までは評価されますがevalを使っていないのでそのまま表示されます。

 C array[0] is ${C[0]}
 Mon Jan 31 18:22:37 JST 2011
 C array[1] is ${C[1]}
 2011年 01月 31日 星期一 18:22:37 JST
 C array[2] is ${C[2]}
 2011年  1月 31日 月曜日 18:22:37 JST

#br
#htmlinsertpcsp(linux_ads_btm.html,linux-sp.html)
#br

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS