gpt4 book ai didi

arrays - 奇怪的行为:输入参数(具有以 “D”或 “L”字符结尾的多个值)

转载 作者:行者123 更新时间:2023-12-03 00:37:13 25 4
gpt4 key购买 nike

我具有以下PowerShell功能:

function Get-Devices {
[CmdletBinding()]
param(
[Parameter(Mandatory=$False, ValueFromPipeline=$True, ValueFromPipelineByPropertyName=$True, ParameterSetName='Code')]
[String[]]$Codes
)
foreach ($Code in $Codes){write-output $Code}
}

虽然我这样说:

Get-Devices -Code 92D, 88L



它产生了以下输出:

92
88

注意,最后一个字符D和字符L被剥离。如果将值括在引号中,则可以使它工作。此外,以下所有功能均可按预期工作:

Get-Devices -Code D92, L88
Get-Devices -Code 92E, 88F
Get-Devices -Code 34G, 12Z
Get-Devices -Code "92D", "88L"



特别注意上面的第二行。仅仅 DL足以给我带来麻烦。

是什么导致D和L特别从每个值的末尾剥离? 我真的不想强制人们为了避免出现此特定问题而在所有值中添加引号。强制Powershell不从每个值的末尾剥离 DL而不要求这些值周围加引号的最简单方法是什么?

我已经尝试将输入参数类型更改为: [Array[]]$Codes。这在行为上没有任何区别。我还确认了上述循环处理后,所有值都被视为字符串类型。任何避免这种行为的帮助将不胜感激!

唯一的好消息是这小段代码和相应的奇怪行为很容易重现...。

最佳答案

要了解这里发生的情况,请记住Powershell与.Net有着密切的关系。查看有关在C#中声明数字文字的文档,以获取线索:

  • Integer Literals
  • Real Literals

  • 我们可以通过检查 PowerShell language specification *获得更具体的信息:
  • §2.3.5.1.1整数文字包括:lkbmbgbtbpb
  • §2.3.5.1.2实际文字添加了d

  • 您会在这里看到几个后缀(包括 DL)来指示您正在使用的特定数字类型。我敢打赌,所有其他后缀都会给您带来同样的问题。如果我是对的,我也将回过头来仔细看一下这个断言:

    I also confirmed all values are treated as a string type when processed by the above loop.



    从您的代码来看,这甚至看起来是正确的。但是,在代码之前,首先需要将这些值解释为数字,然后将其转换为字符串。不幸的是,在这种情况下,可能是 shell 本身,这意味着除了需要用引号引起来,您实际上无能为力:(

    *通过 this question.找到

    关于arrays - 奇怪的行为:输入参数(具有以 “D”或 “L”字符结尾的多个值),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31929359/

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