gpt4 book ai didi

powershell - 为什么将 "switch"类型参数的值传递给字符串参数?

转载 作者:行者123 更新时间:2023-12-04 00:08:54 25 4
gpt4 key购买 nike

测试代码(test.ps1):

Param(
[string]$content = $null,
[switch]$flag = $false
)
Write-Host $content

输出:

PS C:\Users\powershell>。\test.ps1

PS C:\Users\powershell>。\test.ps1-标志$ true
真的
PS C:\Users\powershell>。\test.ps1-标志$ false
错误的
PS C:\Users\powershell>。\test.ps1 -flag $ true -content“拉拉拉”
拉拉拉

无论我将 $content设置为 $null还是 "",或者没有任何默认值,输出都是相同的。

那么,为什么 $content$flag中获取值呢?

最佳答案

@PetSerAl已经表明了您的误解,但是也许它太简短了,所以我将详细说明。
[switch]参数不像常规参数那样接受值。通常,您可以通过提供或省略参数分别将其设置为true或false:

PS C:\>获取内容。\test.ps1
参数(
[string] $ Content = $ null,
[switch] $ Flag
)
$ flag.IsPresent
$内容
PS C:\>。\test.ps1
错误的

PS C:\>。\test.ps1-标记
真的

或者,您可以通过在开关参数和值之间放置一个冒号来显式地传递一个值:

PS C:\>。\test.ps1-标志:$ false
错误的

PS C:\>。\test.ps1-标志:$ true
真的

允许在冒号后加空格,但不允许在前加空格(-Flag: $false传递$false作为开关值,-Flag :$false不允许)。

如果您尝试在不带冒号的情况下分配开关值,则该值实际上将传递给该行中的下一个参数,在您的情况下为-Content参数:

PS C:\>。\test.ps1-标志$ false
参数$ Flag的True#值
(位置)参数$ Content的False#值
PS C:\>。\test.ps1-标记-Content $ false
参数$ Flag的True#值
(命名的)参数$ Content的False#值

如果您使用-Flag $true(不带冒号)并将值传递给(命名的)参数-Content,则值$true将作为未命名的第三个参数(可通过automatic variable $args进行访问)传递,就像您将值放在参数末尾一样。陈述:

PS C:\>获取内容。\test2.ps1
参数(
[string] $ Content = $ null,
[switch] $ Flag
)
$ flag.IsPresent
$内容
$ args [0]
PS C:\>。\test2.ps1-标志$ false-内容'某物'
真的
某物
False#$ false作为未命名的第三个参数传递
PS C:\>。\test2.ps1-标志:$ false-内容'某物'
False#$ false作为开关参数$ Flag的显式值传递
某物
PS C:\>。\test2.ps1-标记-Content'something'$ false
真的
某物
False#$ false作为未命名的第三个参数传递

关于powershell - 为什么将 "switch"类型参数的值传递给字符串参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45691877/

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