Terraformのsubstrを使って、文字列を切り出す/抽出するやり方を整理します。
はじめに
こんにちは、@bioerrorlogです。
substr
関数を使えば、Terraformで文字列を切り出すことができます。
このsubstr
関数の使い方で少し戸惑うことがあったので、今回は改めて使い方を整理します。
# 作業環境 $ terraform --version Terraform v1.1.9
substrの使い方
基本の使い方
substr
の基本的な使い方はドキュメントの通りです。
substr(string, offset, length)
第一引数string
に対象の文字列、第二引数offset
に開始地点、第三引数length
に切り出す長さを指定します。
(第二引数の開始地点は0から始まることに注意)
# 使用例 > substr("Hello", 0, 3) "Hel" > substr("Hello", 1, 3) "ell" > substr("Hello", 1, 10) "ello"
ここまでは非常にシンプルな話です。
マイナス値を活用する
少し頭を整理したいのは、offset
やlength
にマイナス値を指定した際の挙動です。
まずはoffset
にマイナス値を指定してみます。
> substr("Hello", -2, 2) "lo" > substr("Hello", -3, 2) "ll" > substr("Hello", -4, 2) "el" > substr("Hello", -10, 2) "He"
offset
にマイナス値を指定すると、第一引数の終端側から数えた地点が切り出しの開始地点になります。
では次にlength
をマイナス値に設定します。
# offset/lengthともにマイナス値 > substr("Hello", -1, -1) "o" > substr("Hello", -2, -1) "lo" > substr("Hello", -3, -1) "llo" > substr("Hello", -4, -1) "ello" > substr("Hello", -5, -1) "Hello" # lengthのみマイナス値 > substr("Hello", 0, -1) "Hello" > substr("Hello", 1, -1) "ello" # lengthのマイナス値の変化 > substr("Hello", -5, -2) "Hello" > substr("Hello", -5, -3) "Hello" > substr("Hello", -5, -4) "Hello"
length
をマイナス値に指定すると、offset
で指定された開始地点から対象文字列の終端までが切り出されます。
そしてこの挙動はlength
がマイナス値であることで判定されるため、そのマイナス値の大きさには関係ないようです。
確かに、-1
以外のマイナス値が使われているのを見たことがありません。
おわりに
以上、Terraformのsubstr
関数の使い方を整理しました。
最初はlength
のマイナス値指定の挙動が少し不思議に感じられましたが、慣れればシンプルに理解できます。
同じ違和感を感じたどなたかのお役に立てば幸いです。
[関連記事]
参考
substr - Functions - Configuration Language | Terraform | HashiCorp Developer
substr - Functions - Configuration Language | Terraform by HashiCorp
terraform/string.go at 7b4a5513a9d5719290c7d7a789f9d7067a8d183b · hashicorp/terraform · GitHub