如何在 Puppet 中将字符串转换为整数

How to convert string to integer in Puppet

我正在尝试将基于时间(小时和分钟)的字符串转换为木偶中的整数。 它在大多数情况下工作正常,除非分钟小于 10,比如 08。对于这些值,它会抛出异常。

Error: Evaluation Error: The value '08' cannot be converted to Numeric. 

使用的代码

$minute_string = Timestamp.new.strftime("%M")
#Tried the following and it did not work
#$minute_integer = $minute_string + 0
#Subsequently, attempted the following but it did not work either
$minute_integer = Integer($minute_string)

这看起来像问题 PUP-6010。已关闭为 "won't do",但评论提供了解释和解决方法。

简而言之,Puppet 使用完全相同的规则将数字字符串转换为它用于转换数字文字的数字,其中包括前导 0x 指示解释为十六进制,否则前导 0 指示解释为八进制。其他一些语言,例如 Ruby 和 C,也有相同的约定。但是 '8' 和 '9' 不是有效的八进制数字,因此字符串 '08''09' 不能通过算术运算符或 Integer() 构造函数直接转换为整数。

推荐的解决方案是使用 scanf 函数来转换您的字符串:

$minute_integer = $minute_string.scanf('%d')[0]

使用该格​​式,所有数字都将被解释为十进制,前导零没有特殊意义。函数returns一个数组,其中[0]当然选择索引0处的元素。

一种解决方法是添加 -,它 而不是 用零填充它。但要检查 John 的解决方案是否有效。

$minute_string = Timestamp.new.strftime("%-M") ; notice("Current minute : $minute_string")

接受约翰的回答