Jim*_*Jim 5 powershell parameter-passing
测试代码(test.ps1):
Param(
[string]$content = $null,
[switch]$flag = $false
)
Write-Host $content
Run Code Online (Sandbox Code Playgroud)
输出:
PS C:\Users\powershell> .\test.ps1 PS C:\Users\powershell> .\test.ps1 -flag $true True PS C:\Users\powershell> .\test.ps1 -flag $false False PS C:\Users\powershell> .\test.ps1 -flag $true -content "lalala" lalala
无论我设置$content为$null,或者""没有任何默认值,输出都是相同的.
那么为什么$content要从中获取价值$flag呢?
Ans*_*ers 10
@PetSerAl已经表明了你的误解,但也许它有点过于简短,所以我会详细说明一下.
一个[switch]参数不采取像普通的参数值.通常通过提供或省略参数将它们分别设置为true或false:
PS C:\> Get-Content .\test.ps1
Param(
[string]$Content = $null,
[switch]$Flag
)
$flag.IsPresent
$Content
PS C:\> .\test.ps1
False
PS C:\> .\test.ps1 -Flag
True
或者,您可以通过在switch参数和值之间放置冒号来显式传递值:
PS C:\> .\test.ps1 -Flag:$false False PS C:\> .\test.ps1 -Flag:$true True
允许冒号之后的空格,但不允许之前的空格(作为切换值-Flag: $false传递$false,-Flag :$false不是).
如果您尝试在没有冒号的情况下分配开关值,则实际将值传递给行中的下一个参数,在您的情况下,-Content参数为:
PS C:\> .\test.ps1 -Flag $false True # value of the parameter $Flag False # value of the (positional) parameter $Content PS C:\> .\test.ps1 -Flag -Content $false True # value of the parameter $Flag False # value of the (named) parameter $Content
如果使用-Flag $true(不带冒号)并将值传递给(named)参数,则-Content该值$true将作为未命名的第三个参数(可通过自动变量 访问)传递$args,就像将值放在语句末尾一样:
PS C:\> Get-Content .\test2.ps1
Param(
[string]$Content = $null,
[switch]$Flag
)
$flag.IsPresent
$Content
$args[0]
PS C:\> .\test2.ps1 -Flag $false -Content 'something'
True
something
False # $false passed as unnamed 3rd parameter
PS C:\> .\test2.ps1 -Flag:$false -Content 'something'
False # $false passed as explicit value of switch parameter $Flag
something
PS C:\> .\test2.ps1 -Flag -Content 'something' $false
True
something
False # $false passed as unnamed 3rd parameter
| 归档时间: |
|
| 查看次数: |
10316 次 |
| 最近记录: |