皆さんはテンプレートエンジンを使っていますでしょうか。 テンプレートエンジンとは、データとテンプレートを合体させて文字列を作る仕組みのことです。

ちなみに、使用頻度の高い言語が Python なので、Jinja2 というテンプレートエンジンをよく使っています。

Jinja — Jinja Documentation (3.0.x)

しかし、このテンプレートエンジンを使うには、環境構築などの準備をする必要があります。 もう少し手軽に使えるテンプレートエンジンがあればと思ってました。

そこで、Bash を使ってテンプレートエンジンのように変数を展開する方法を記載します。

目次

はじめに

変数が書かれている hello.txt ファイルを用意します。

hello.txt
Hello, ${name}

eval コマンド

LInux であれば標準で使用できる eval コマンドを使用することで、変数を展開できます。

$ name=eval
$ eval "echo \"$(cat hello.txt)\""
Hello, eval

ヒアストリングを使って展開することも可能です。

$ name=eval
$ eval "cat <<< \"$(cat hello.txt)\""
Hello, eval

envsubst コマンド

envsubst コマンドに変数を渡して実行することで、eval コマンドよりもシンプルに変数展開できます。

通常はインストールされていないので、パッケージマネージャーより gettext パッケージをインストールする必要があります。1

brew install gettext

インストールが完了したら、以下のように実行します。

$ cat hello.txt | name=envsubst envsubst
Hello, envsubst

Reference(参考文献)


  1. Mac は Homebrew からインストールできます。Linux の場合は、yum(dnf), apt からインストールしましょう。