Rustの練習でenvsubstを車輪再発明

Rustの練習がしたかった。新しくプログラミング言語を学ぶときにはテンプレートエンジンを作るのが手頃な難易度で良いと誰かが言っていたので、envsubst みたいなやつを作ろうと思った。

envsubstはテキスト中の$FOOのような文字列を環境変数の値に置き換えてくれるCLI。インストールも使い方も簡単なので、よく使う。

ただ、唯一の不満な点は変数名のエスケープができないこと。かわりに--variablesオプションで置き換える変数名を個別に指定することはできる。

そこで、エスケープできるenvsubstを作ってみよう、と思った。Rustで作るので、名前は renvsubst にする。使用感は以下のような感じ。

$ export FOO=foooo
$ echo 'I like $FOO, ${FOO}, \$FOO, \${FOO}' | renvsubst
I like foooo, foooo, $FOO, ${FOO}

作った。

成果物は GitHub に置いた。

github.com

感想

難しかった。まだ慣れた感じはしない。ソースコード汚いし。

なにしろ、ちょっとしたことでコンパイラに叱られる。その変数はスコープから出られないよって。関数の返り値に &str をしようとするとだいたい怒られるし。