【问题标题】:Powershell: Why do I need to escape a double-dash parameter in $args?Powershell:为什么我需要转义 $args 中的双破折号参数?
【发布时间】:2012-08-25 05:41:45
【问题描述】:

这是一个非常简单的示例脚本:

function fun () { "AAA $args ZZZ" }
fun a b c
fun a - b
fun a -- b
fun a '--' b
fun a --- b

我得到的结果是:

AAA a b c ZZZ
AAA a - b ZZZ
AAA a b ZZZ
AAA a -- ZZZ
AAA a --- b ZZZ

我显然需要避开双破折号。为什么?

我正在为一套脚本编写一个 powershell 包装器,其中一些脚本为“--”分配了特定的含义。我怎样才能不加修改地通过它?

【问题讨论】:

标签: powershell command-line


【解决方案1】:

-- 被认为是一个特殊的“参数结束”参数。

来自 Bruce Payette 的 Windows PowerShell in Action:

引号使参数绑定器不会将带引号的字符串视为参数。 另一种不太常用的方法是使用特殊的“结束参数” 参数,它是两个背靠背的连字符 (--)。

这个序列之后的所有内容都将被视为一个参数,即使它看起来像一个参数。例如,使用 -- 也可以写出字符串 -InputObject 而不使用引号:

PS (3) > Write-Output -- -InputObject

将导致 -inputobject 作为输出。

【讨论】:

  • 我仍然想将所有原始 $args 传递给另一个命令。这种行为有什么合理的解决方法吗?
  • 你已经在使用它了。单引号或双引号。如果没有某种转义,您将无法使用 --.
猜你喜欢
  • 2019-12-03
  • 1970-01-01
  • 2021-06-21
  • 2014-04-27
  • 2021-11-09
  • 2016-04-11
  • 2013-04-05
  • 2013-11-26
  • 2019-11-07
相关资源
最近更新 更多