arrays - 如何在不使用引号的情况下保留字符串数组参数中的尾随零
问题描述
当数组元素的值包含点时, PowerShell 会删除该值的尾随零。除非我将值括在引号中。不幸的是,我需要保留尾随零,并且脚本用户无法可靠地使用引号。
如何强制 PowerShell 保留尾随零?
- 数组元素格式为Number.Number
- 数组元素可能有 1 到 n 个尾随零
- 单元素数组保留尾随零
- 多元素数组删除尾随零
将参数强烈键入为 [string[]] 并不能解决问题。
例子:
function Get-Customer {
Param
(
[string[]]$CustomerId
)
$CustomerId
}
> Get-Customer -CustomerId 654.1,654.10,654.1721,654.1720
654.1 #CORRECT
654.1 #INVALID
654.1721 #CORRECT
654.172 #INVALID
解决方案
如果调用者未将其放在引号中,则您无法保留该 0。事实是这些值将被解释为数字,因为它们符合数字文字的模式。
因此,如果您无法更改调用者的行为,那么它们在进入您的函数之前将是数字。您的[string[]]
演员会将数字转换为字符串,但此时它已经是一个数字并且将遵循number -> string
规则。
PowerShell 在类型转换方面非常宽松,或者更确切地说,当存在不匹配时,它会努力成功转换类型,因此在这种情况下也很难抛出错误(您无权访问原始值知道任何错误,因为这发生在参数绑定期间)。
你可以这样做:
function Get-Customer {
Param
(
[ValidateScript({
$_ -is [string]
})]
[object[]]$CustomerId
)
$CustomerId
}
它会强制传入的值已经是 a [string]
,这对于字符串转换有用的所有其他情况来说是很糟糕的。
推荐阅读
- ios - 创建可重用的 UIView 子类 - 遇到大小问题
- swift - 如何快速执行一个函数 5 秒
- android - Android:运行测试用例时:无法确定任务':app:compileDebugAndroidTestJavaWithJavac'的依赖关系
- python - 如何将 self 参数传递给 python cProfile
- reactjs - 应用 find() 时获得 2 个渲染而不是 1 个渲染
- reactjs - React 构建文件不适用于共享主机
- r - r 中具有平均值和 sd 的频率表,每行有多个案例
- c# - WinForms txtTextbox_MouseEnter 触发表单上的所有文本框
- javascript - 如何删除字符串中任何语言的所有非字母字符?
- java - 评分栏未出现