PowerShell在解析时如何确定哪种模式?

时间:2018-09-27 12:42:27

标签: powershell variables

我不太了解PowerShell如何解析命令并需要您的帮助。

我阅读了Microsoft about_parsing文档中的以下解释:

  

处理命令时,PowerShell解析器以表达式模式或参数模式运行:

     

在表达式模式下,字符串值必须包含在引号中。未用引号引起来的数字将被视为数字值(而不是一系列字符)。

     

在参数模式下,除非每个值以以下特殊字符之一开头,否则它们将被视为可扩展字符串:美元符号($),符号(@),单引号('),双引号(“ )或左括号(()。

     

如果以这些字符之一开头,则该值将被视为值表达式。

我可以理解在解析命令时,PowerShell使用表达式模式还是参数模式,但是我不太理解以下示例。

$a = 2+2
Write-Output $a #4(int), expression mode
Write-Output $a/H #4/H(str), argument mode

我想知道PowerShell首先扩展变量,然后在解析时决定使用哪种模式,对吗?

如果是这样,还有一个关于数据类型的问题。

对我来说,前一个命令产生整数是合理的,而后一个命令则不是。为什么将整数4放在字符串/H的旁边?

我尝试了这个例子,它奏效了。似乎变量在扩展时会变成字符串,无论它们是什么数据类型。是吗?

$b = 100
Add-Content C:\Users\Owner\Desktop\$b\test.txt 'test'

感谢您的帮助。

编辑以澄清评论后的观点

我有评论说两个Write-Output示例都是参数模式,那么示例可以这样解释吗?

  

写输出“ $ a”

     

写输出“ $ a / H”

对于这个含糊不清的问题,我深表歉意,但我想知道:

  1. 在参数模式下是否省略双引号?

  2. Write-Output示例引用自我链接的微软文档,它说第一个示例产生积分,但这是错误的吗?

0 个答案:

没有答案