我在使用ForEach-Object
和ToString
时遇到了一些我没有预料到的Powershell行为。数字会被自动替换,我无法仅从输出中绘制替换规则。
下面是一个简单的例子:
PS C:UsersTelefonmann> 1..3 | ForEach-Object {$_.ToString('test_0_1')}
test_1_1
test_2_1
test_3_1
PS C:UsersTelefonmann> 1..3 | ForEach-Object {$_.ToString('test_0_0')}
test_0_1
test_0_2
test_0_3
PS C:UsersTelefonmann> 1..3 | ForEach-Object {$_.ToString("test_0$__0")}
test_01_1
test_02_2
test_03_3
PS C:UsersTelefonmann> 1..3 | ForEach-Object {$_.ToString("test_0$__$_")}
test_11_1
test_22_2
test_33_3
在第一个例子中,0被替换,在第二个例子中,只替换最后一个0,在第三个例子中,占位符和0被替换,在最后一个例子中,0和占位符当然被替换。Powershell只是看到一个字符串与一个0,然后假设最后一个0在任何字符串应该是一个计数器?
这种行为的术语是什么/是否有相关的文档?我如何禁用它?
这不是Powershell做的。.ToString
是一个。net方法。
你可以"禁用"它。通过不使用用于格式化的参数
ToString (IFormatProvider)
转换此实例的数值属性转换为其等效字符串表示形式特定于区域性的格式信息。
你正在使用IformatProvider .net接口将整数格式化为字符串,该接口负责你所看到的行为。
要在字符串中应用修改,只需这样做:
1..3 | ForEach-Object { ("test_0_$_") }
引用
。Net -格式类型
Int32。ToString
生成计算机名的习惯用法是:
1..3 | % tostring comp000
comp001
comp002
comp003
您可以使用反斜杠转义代码,如以下ip地址示例:
1..3 | % tostring 192.168. .0
192.168.0.1
192.168.0.2
192.168.0.3