我需要将$name
中的最后一位数字从1换算为2或2换算为1
在Ruby(irb)中我得到了像这样的工作
irb(main):038:0> name = "drdev-ams-1"
irb(main):059:0> name = name.sub(/[12]$/, '1' => 2, '2' => 1)
=> "drdev-ams-2"
irb(main):060:0> name = name.sub(/[12]$/, '1' => 2, '2' => 1)
=> "my_string-1"
在木偶2.7中如何实现同样的目标?
regsubst($name, '[12]$', "'1' => 2, '2' => 1")
这不会给出正确的结果。
答案 0 :(得分:0)
在Ruby中这段代码
{ '1' => 2, '2' => 1 }
定义了一个hash,在您的情况下,子方法使用该hashes来替换任何与该哈希的键之一相等的搜索结果和该键的值。在Ruby中,当哈希是函数调用的最后一个参数时,可以省略大括号。以下两个调用是等效的:
name.sub(/[12]$/, '1' => 2, '2' => 1)
name.sub(/[12]$/, { '1' => 2, '2' => 1 })
Puppet有{{3}}自己的语法,几乎与Ruby的语法相同,这并不奇怪。您应该注意一些细微的差异。
首先,你在哈希周围加上双引号。这意味着Puppet解析器将生成一个字符串而不是一个哈希。此外,即使哈希是函数调用的最后一个参数,Puppet也需要括号。最后,Puppet不需要围绕哈希键的引号(尽管如果你提供它们并不重要)。但它没有相反的方法:在Ruby { hello => 'world' }
中导致解析错误,而Puppet解析器理解这一点就好了。
在两个哈希之间理解你的Puppet代码只需要稍微调整一下:
regsubst($name, '[12]$', { '1' => 2, '2' => 1 } )
以下是有效的证据:
$x1 = "drdev-ams-1"
$x2 = "drdev-ams-2"
alert( "x1 = ${x1}" )
alert( "x2 = ${x2}" )
$y1 = regsubst($x1, '[12]$', { '1' => 2, '2' => 1 } )
$y2 = regsubst($x2, '[12]$', { '1' => 2, '2' => 1 } )
alert( "y1 = ${y1}" )
alert( "y2 = ${y2}" )
产生以下输出:
Alert: Scope(Class[main]): x1 = drdev-ams-1
Alert: Scope(Class[main]): x2 = drdev-ams-2
Alert: Scope(Class[main]): y1 = drdev-ams-2
Alert: Scope(Class[main]): y2 = drdev-ams-1
希望这有帮助。
顺便说一下,我也来自阿姆斯特丹。