24377


シェルスクリプトの冒頭でreadonly変数を初期化する際、

[code]

    readonly HOGE_DIR='${HOGE_HOME}'
    readonly OUTPUT_DIR_SRC='$(eval echo ${HOGE_DIR})/src'
    
[/code]

としているのを見かけました。（HOGE_HOMEは環境変数です。どちらも'（シングルクオート）で囲われています。）

[code]

    readonly HOGE_DIR="${HOGE_HOME}"
    readonly OUTPUT_DIR_SRC="${HOGE_DIR}/src"
    
[/code]

で事足りると思うのですが、意図がわかりません。  
evalコマンドを使った何らかの定石なのでしょうか？


CC BY-SA 3.0
2016-04-27T03:19:53.927
24376
2016-04-27T03:49:18.613
2016-04-27T03:49:18.613
15147
15147
question
bash shellscript sh
パラメータ展開ではなくevalコマンドで変数の初期化をする意図がわからない。


単に、シェルの変数展開を理解していない人が書いたのではないかと思います。たまに、ただ変数展開すればいいだけのところに `echo` や `eval`
を利用する例は見かけますが、両方使う例を見たのは初めてですね。

最近だと、この記事で無駄に `eval` 使っていました。

  * シェルスクリプトでバックアップのすすめ～初心者でもよくわかる！VPSによるWebサーバー運用講座(5) - さくらのナレッジ 
    * <http://knowledge.sakura.ad.jp/knowledge/4334/>

意図はわかりませんが、`$HOGE_DIR`
の内容次第でワード分割やファイル名展開やコマンド実行や色々な動作が起こります。恐らく、そういったことまで意図していない(わかっていない)と思います。


CC BY-SA 3.0
2016-04-27T03:39:37.880
24377
2016-04-27T03:39:37.880
3061
24376
answer