我不太了解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”
对于这个含糊不清的问题,我深表歉意,但我想知道:
在参数模式下是否省略双引号?
Write-Output示例引用自我链接的微软文档,它说第一个示例产生积分,但这是错误的吗?