遍历ANT脚本中的哈希数组



我正在使用Jenkins进行一些自动化工作,在那里我像一样存储了模式和DB详细信息

存储在ANT属性${schemaValue}中的[schema1:db1, schema2:db2]

<propertycopy name="schemaValue" from="${SchemaVariable}"/>

现在我正试图循环通过这个散列数组来执行连接,我试过

<for param="theparam" list="${schemaValue}">
<sequential>
<echo message="param: @{theparam}"/>
</sequential>
</for>

但这将${schemaValue}视为字符串,而不是数组

对此提供帮助。

编辑

正如@AR.3所建议的,我已经尝试过

<propertyregex override="yes" property="paramValue" input="@{theparam}" regexp=".+:([^]]+)]?" replace="1"/>
<echo message="paramValue: ${paramValue}"/>
<propertyregex override="yes" property="paramKey" input="@{theparam}" regexp="[?([^[]+):]" replace="1"/>
<echo message="paramKey: ${paramKey}"/>

${paramValue}正确地为我提供了db1和db2的

${paramKey}抛出错误

Ant中没有标准编程语言中存在的严格意义上的数组概念。for循环将简单地迭代由分隔符(默认分隔符为,)分隔的字符串的元素。在您的情况下,它看起来更像是一个映射或键值对列表。

如果预期行为是打印映射中的值(db1db2),则可以使用涉及正则表达式替换的附加步骤:

<for param="theparam" list="${schemaValue}">
<sequential>
<propertyregex override="yes"
property="paramValue"  input="@{theparam}"
regexp=".+:([^]]+)]?" replace="1"/>
<echo message="param: ${paramValue}"/>
</sequential>
</for>

因此,最初包含在theparam中的回声值将是[schema1:db1schema2:db2]。模式.+:([^]]+)]?将通过与匹配来与这些值匹配

  1. 一个或多个字符
  2. 接着是CCD_ 12
  3. 其次是非CCD_ 13字符
  4. 接着是零个或一个CCD_ 14

propertyregex将第一组的值,即([^]]+)匹配的值放入属性paramValue中。这实际上是冒号后面的值。

运行它应该打印:

[echo] param: db1
[echo] param: db2

编辑:

要获取密钥,可以使用以下正则表达式:

<propertyregex override="yes" property="paramKey"
input="@{theparam}" regexp="[?([^[]+):[^]]+]?" replace="1"/>

相关内容

  • 没有找到相关文章

最新更新