質問: シェルスクリプトの冒頭でreadonly変数を初期化する際、 ``` readonly HOGE_DIR='${HOGE_HOME}' readonly OUTPUT_DIR_SRC='$(eval echo ${HOGE_DIR})/src' ``` としているのを見かけました。(HOGE_HOMEは環境変数です。どちらも'(シングルクオート)で囲われています。) ``` readonly HOGE_DIR="${HOGE_HOME}" readonly OUTPUT_DIR_SRC="${HOGE_DIR}/src" ``` で事足りると思うのですが、意図がわかりません。 evalコマンドを使った何らかの定石なのでしょうか?
回答: 単に、シェルの変数展開を理解していない人が書いたのではないかと思います。たまに、ただ変数展開すればいいだけのところに `echo` や `eval` を利用する例は見かけますが、両方使う例を見たのは初めてですね。 最近だと、この記事で無駄に `eval` 使っていました。 * シェルスクリプトでバックアップのすすめ~初心者でもよくわかる!VPSによるWebサーバー運用講座(5) - さくらのナレッジ + 意図はわかりませんが、`$HOGE_DIR` の内容次第でワード分割やファイル名展開やコマンド実行や色々な動作が起こります。恐らく、そういったことまで意図していない(わかっていない)と思います。