就地插值

Last published : Oct 06, 2026
现在可以使用 StyleBook 表达式替换字符串的一部分或多部分。当 StyleBook 编译器评估这些字符串表达式时,字符串中使用 StyleBook 表达式的部分将被表达式的值替换。要在字符串中包含 StyleBook 表达式,我们使用以下表示法:
"...%{...}%..."
其中,介于“%{”和“}%”之间的字符构成一个 StyleBook 表达式。这些表达式称为“就地插值”。
例如,字符串“lb-%{$parameters.appname}%-svc”是一个带有 StyleBook 表达式就地插值的字符串表达式。字符串表达式的值取决于插值表达式的值。假设 $parameters.appname 被赋值为“app1”。那么,该字符串表达式将评估为 lb-app1-svc。这使得值不必在字符串表达式中硬编码,而是可以根据用户定义的值进行评估。
就地插值的一个实际用例是在 StyleBook 中参数化策略表达式。考虑这样一种情况:您想编写一个策略表达式,检查 HTTP URL 是否包含特定单词,例如“jpeg”。
为此,您可以按如下方式编写策略表达式:“HTTP.REQ.URL.CONTAINS(\\"jpeg\\")”。
现在,如果您想参数化 HTTP URL 中的对象,可以在 StyleBook 中添加一个字符串参数,例如 $parameters.url-object。策略表达式应基于此参数编写。为此,您可以使用字符串连接来实现结果。表达式将如下所示:
str("HTTP.REQ.URL.CONTAINS(\\"" + $parameters.url-object + "\\")")
如果 $parameter.url-object 被赋值为“csv”,则上述表达式将评估为“HTTP.REQ.URL.CONTAINS(\\"csv\\")”。但是,此表达式不易阅读。为了使此参数化易于阅读和理解,您可以使用就地插值。
带有就地插值的表达式现在是:
str("HTTP.REQ.URL.CONTAINS(%{quotewrap($parameters.url-object)}%)")
在上述表达式中,您使用了在 $parameters.url-object 的值周围添加内部引号的插值表达式。此表达式的结果与上述相同,但它看起来更直观,更接近实际结果。

插值中允许的类型

您可以在插值中使用生成以下类型值的表达式:布尔值、数字、TCP 端口、IP 地址和字符串。当插值被结果替换时,生成的值会自动转换为字符串。
字符串表达式可以有 0 个、1 个或多个插值。在顺序插值中,字符串表达式的不同部分可以被不同的 StyleBook 表达式替换。例如,如果 $parameters.appname 是 "app1" 且 $parameters.vip 是 "1.1.1.1",则字符串 lb-%{$parameters.appname}%-%{$parameters.vip}% 返回 "lb-app1-1.1.1.1"。
字符串表达式还支持嵌套插值。也就是说,一个插值表达式可以嵌套在另一个插值表达式中,以便一个表达式的值可以作为第二个表达式的输入。
例如,考虑字符串 "%{lb-%{$parameters.port + 1}%}%"
如果 $parameters.port 为 80,则内部字符串 "%{$parameters.port + 1}%" 返回 "lb-81"。这里,此表达式嵌套在另一个插值表达式中。
下表描述了不同类型的插值及其示例和相应结果。示例中使用的参数值为:
  • $parameters.appname: "lb1"
  • $parameters.vip: "1.1.1.1"
  • $parameters.n1: 1
  • $parameters.n2: 3

简单插值

表达式 结果
负载均衡器-%{$parameters.appname}%-默认 负载均衡器-lb1-默认

自动类型转换

表达式 结果
lb-%{1}% lb-1
lb-%{$parameters.vip}% lb-1.1.1.1
负载均衡器-%{true}% 负载均衡器-True

顺序插值

表达式 结果
%{$parameters.appname}%-%{str($parameters.appname)}% lb1-lb1
lb-%{1}%-%{2}% lb-1-2

嵌套插值

表达式 结果
%{abc-%{$parameters.n1 + 1}%}% abc-2
字符串("%{abc-%{$parameters.n1}%}%-%{$parameters.n2}%") bc-1-3

带引号包装的插值

表达式 结果
字符串("%{引用包装(示例文本)}%")
字符串("%{引用包装(https://)}%+HTTP.REQ.HOSTNAME+HTTP.REQ.URL")
"示例文本
"<https://"+HTTP.REQ.HOST NAME+HTTP.REQ.URL

插值中的转义字符

如果字符 "%{" 或 "}%" 是字符串的一部分,您必须提供 "\" 作为转义字符,以便 StyleBook 编译器不会将它们评估为插值标签。
示例:
str("%{\%\{ + str($parameters.vip) + \}\%}%") 如果 $parameters.vip 为 1.1.1.1,则返回 "%{1.1.1.1}%"
下表描述了更多表达式及其结果:
类别 表达式 结果
转义插值 str("%{str($parameters.n1) + }\%}%") 1}%
负载均衡器-%{str($参数.n1) + }\%}% lb-1}%
"%{str($parameters.n1) + \"\}\%\"}%" 1}%