はじめに
文字列の連結というと +
でいいのでは?と思った方もいるかも知れません。(私もそうでした)
+
の場合は、型によって挙動が異なります(数字の場合は足し算)。
一方で ~
は、数字が与えられても文字列にキャストして連結する動きになります。
この記事ではかんたんなサンプルをご紹介します。
- 動作環境
- Ansible 2.9.9
- Jinja2 2.11.2
サンプル
--- - hosts: localhost gather_facts: false tasks: - name: debug: msg: "{{ 123 ~ 456 }}"
文字列として 123
と 456
を連結します。
ok: [localhost] => { "msg": "123456" }
仮に "{{ 123 + 456 }}"
とした場合は、数値としてたされて
ok: [localhost] => { "msg": "579" }
もし +
を使いつつ、文字列として連結したい場合は | string
でキャストする必要があります。
msg: "{{ (123 | string) + (456 | string) }}" # "123456"
また、 +
の場合、文字列と数値の組み合わせの場合はエラーになります。
msg: "{{ 'Hello' + 1 }}"
エラー
fatal: [localhost]: FAILED! => {"msg": "Unexpected templating type error occurred on ({{ 'Hello' + 1 }}): must be str, not int"}
こんな場合でも ~
であれば、お互いを文字列として扱います。
msg: "{{ 'Hello' ~ 1 }}"
結果
ok: [localhost] => { "msg": "Hello1" }
おわりに
連結したい値の型によらずに文字列として連結したいときに、| string
をわざわざ書かずにスッキリして良いと思います。