逆引きUNIXコマンド/文字列をコマンドとして実行する・evalコマンド
の編集
Top
/
逆引きUNIXコマンド
/
文字列をコマンドとして実行する・evalコマンド
[
トップ
] [
編集
|
差分
|
バックアップ
|
添付
|
リロード
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
-- 雛形とするページ --
(no template pages)
#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
タイムスタンプを変更しない
#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
テキスト整形のルールを表示する