笔记:
这个答案显示了如何转义/引用@
字符。正确地在 PowerShell 的通常解析规则的上下文中。
如果您的命令行仅包含逐字参数- 即,仅包含文字标记,而不是 PowerShell变量引用(例如,$file
)或表达式(例如,($dir + '\script.ps1')
) - 您也可以在传递参数s之前放置停止解析符号--%
,如显示在Wasif Hasan 的回答中;请注意,cmd.exe
-style 变量引用,例如%FOO%
仍然扩展,但是。
@
是PowerShell中的元字符(具有句法含义的字符[1]),因此为了将其逐字传递给您,az
您必须引用整个参数或单独`
转义@
:
使用文字脚本文件名:
# Either: `-escape the @
az ... --scripts `@script.ps1
#`# Or: quote the whole argument
# Use '...' for a literal argument.
az ... --scripts '@script.ps1'
将脚本文件名存储在变量中,$file
:
# Either: `-escape the @
az ... --scripts `@$file
#`# Or: quote the whole argument
# Use "..." for an argument with variable references, i.e. an expandable string
az ... --scripts "@$file"
注意:您可以仅在可变情况下逃脱@$file
,但鉴于这不适用于任何字符。除了$
遵循之外@
,最好养成总是逐字引用/转义的习惯@
。
[1]@
有几种句法用途,具体用途取决于接下来出现的字符。在您的情况下,@
in@script.ps1
被解释为带有名为 的变量的splatting 运算符script
,该.ps1
部分被解释为尝试访问以ps1
该变量命名的属性 - 因此出现错误消息。