printf anti-patternと呼ばれるアンチパターンがある。この名前が有名かどうかは分からないが、危険な書き方であること自体はよく知られているのではないかと思う。
Manipulating structured data formats using string functions.
The Most Expensive Anti-Pattern (邦訳: 最も割高なアンチパターン : 構造化されたデータを文字列関数で操作する「printfアンチパターン」について)
身の回りで陥りやすいのはSQL文の組み立てくらいかと思いきや、GitHub Actionsのワークフローもなかなかどうして危険だ。次の例が分かりやすい。
- name: print title run: echo "${{ github.event.issue.title }}"
この例は見た目が echo "${title}" と似ている点にも不安を感じる。うっかりすると見落としそうだ。いっそYAMLに変数を埋め込む機能とシェルスクリプトを埋め込む機能の組み合わせは禁止すべきではないかとすら思ってしまう。actionlintで予防できるだろうか。