为什么从Powershell开关语句中的变量进行奇怪的赋值?

为什么从Powershell开关语句中的变量进行奇怪的赋值?,powershell,Powershell,我是Powershell的初学者,正在努力从Github上找到的一些代码中理解一些语法。我已经阅读了有关Powershell分配和开关语句的文档,无法理解此代码段中的=$Yes和=$No发生了什么: Switch ($Prompt3) { Yes { Stop-EdgePDF Write-Output "Edge will no longer take over as the default PDF viewer."; = $Yes } No

我是Powershell的初学者,正在努力从Github上找到的一些代码中理解一些语法。我已经阅读了有关Powershell分配和开关语句的文档,无法理解此代码段中的
=$Yes
=$No
发生了什么:

Switch ($Prompt3) {
  Yes {
         Stop-EdgePDF
         Write-Output "Edge will no longer take over as the default PDF viewer."; = $Yes
   }
  No   {
         = $No
   }
}
我找不到这种语法的任何引用,而且它在脚本中似乎没有任何作用。那么为什么会有呢?

函数(或变量)名称中有许多字符是有效的;这包括
=
符号。您观察到的是一个函数或别名

示例:

# standard function
function =
{
    return $args
}

# accessing the function: drive
${Function:=} = {
    return $args
}

# defining a new alias
New-Alias -Name = -Value Get-Variable

# using the Alias attribute
function Test-Thing
{
    [Alias('=')]
    param()

    return $args
}

更新:此问题已解决


在我看来是

更改为:

= $Yes
= $No
以及:

更改为:

= $Yes
= $No
看起来搜索和替换很差


.

=
正在作为函数或别名重载。您的示例中缺少代码。观察:
${function:=}={$args};='test'
function={$args}
是另一个语法问题,该问题已在最新版本的脚本中得到解决。请参阅投票结束,因为这是一个印刷错误。谢谢您的回答。我已经读了好几遍了,但还是很难理解它。你是对的,我没有包括所有的代码,但是要提到的另一个细节是变量(别名?)$Yes和$No在PS脚本的任何其他地方都没有使用,它包括几个函数,后面跟着几个基于用户提示的开关,如图所示。@jacobse我假设有一个类似于
$Yes=switch(条件)的东西{
在代码库中的某个地方。如果变量未定义,它将返回
$null
没有。但是如果有,它会做什么?在我的示例中,分配给$No变量的是什么?它是一对空括号!?感谢您的耐心。@jacobse这就是您产生误解的原因-
=
不是问题n在代码中的赋值运算符,它是一个函数调用。有人确切地定义了一个名为
=
{}
的函数,它是一个传递给
=
函数的空
脚本块
。您可以将表达式输出赋值给变量,例如:
$myvar=if($true){'thisval'}else{'thadval'}
@jacobsee是的,我检查了项目,没有定义
=
函数或别名,因此代码行会抛出异常。