皆さんはテンプレートエンジンを使っていますでしょうか。 テンプレートエンジンとは、データとテンプレートを合体させて文字列を作る仕組みのことです。
ちなみに、使用頻度の高い言語が Python なので、Jinja2 というテンプレートエンジンをよく使っています。
Jinja — Jinja Documentation (3.0.x)
しかし、このテンプレートエンジンを使うには、環境構築などの準備をする必要があります。 もう少し手軽に使えるテンプレートエンジンがあればと思ってました。
そこで、Bash を使ってテンプレートエンジンのように変数を展開する方法を記載します。
変数が書かれている hello.txt
ファイルを用意します。
Hello, ${name}
LInux であれば標準で使用できる eval
コマンドを使用することで、変数を展開できます。
$ name=eval
$ eval "echo \"$(cat hello.txt)\""
Hello, eval
ヒアストリングを使って展開することも可能です。
$ name=eval
$ eval "cat <<< \"$(cat hello.txt)\""
Hello, eval
envsubst
コマンドに変数を渡して実行することで、eval
コマンドよりもシンプルに変数展開できます。
通常はインストールされていないので、パッケージマネージャーより gettext
パッケージをインストールする必要があります。1
brew install gettext
インストールが完了したら、以下のように実行します。
$ cat hello.txt | name=envsubst envsubst
Hello, envsubst
Mac は Homebrew からインストールできます。Linux の場合は、yum(dnf), apt からインストールしましょう。
↩