gpt4 book ai didi

arrays - 如何在不使用引号的情况下保留字符串数组参数中的尾随零

转载 作者:行者123 更新时间:2023-12-02 23:07:49 25 4
gpt4 key购买 nike

PowerShell 删除数组元素值的尾随零 当该值包含一个点 .除非我将值括在引号中。不幸的是,我需要保留尾随零,并且脚本用户无法可靠地使用引号。

如何强制 PowerShell 保留尾随零?

  • 数组元素格式为号码.号码
  • 数组元素可能有 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[]] cast 会将数字转换为字符串,但此时它已经是一个数字,并将跟随 number -> string规则。

    PowerShell 在类型转换方面非常宽松,或者更确切地说,当存在不匹配时,它会努力成功转换类型,因此在这种情况下也很难抛出错误(您无权访问原始值知道任何错误,因为这发生在参数绑定(bind)期间)。

    你可以这样做:

    function Get-Customer {
    Param
    (
    [ValidateScript({
    $_ -is [string]
    })]
    [object[]]$CustomerId
    )
    $CustomerId
    }

    它会强制传入的值已经是 [string] ,但是对于字符串转换有用的所有其他情况,哪种情况很糟糕。

    关于arrays - 如何在不使用引号的情况下保留字符串数组参数中的尾随零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55662002/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com