【问题标题】:In powershell, how to build String arrays from "remaining" arguments passed from command line? [duplicate]在powershell中,如何从命令行传递的“剩余”参数构建字符串数组? [复制]
【发布时间】:2020-08-02 07:08:25
【问题描述】:

当函数需要字符串数组时,在命令行中输入 ("arg0", "arg1", "arg2") 很不方便。就像在这个例子中一样:

function Exec-GradleScript(
    [Parameter(Mandatory)]String] $ScriptName
    [Parameter(Mandatory)][String[]] $ArgList
    ){
    & "$ScriptName" $ArgList
}

... -ScriptName 之后的所有参数都需要采用显式数组语法。 我怎样才能避免这种情况,以便我可以输入

Exec-GradleScript foo.gradle arg0 arg1 arg2

还有 $ArgList 值要传递给可执行文件?

【问题讨论】:

    标签: arrays powershell parameters


    【解决方案1】:

    注意:

    • 解决方案由this answer 提供,它展示了如何使用ValueFromRemainingArguments 参数属性将所有单独的未绑定位置参数收集到单个数组参数中。

    • 我认为您的功能已简化;如所写,在链接的答案中实现解决方案本质上使函数变得不必要 - 您可以简单地调用
      foo.gradle arg0 arg1 arg2 直接(假设foo.gradle 是直接可执行的,这是您的函数所建议的) .

    • 顺便说一句:使用 $ScriptName 而不是 "$ScriptName" 就足够了,因为 - 与类似 POSIX 的 shell - PowerShell 允许您使用变量未引用,即使它们的值包含空格或其他 shell 元字符(不执行所谓的 shell 扩展)。


    至于:

    当函数需要String数组时,在命令行输入("arg0", "arg1", "arg2")很不方便。

    繁琐的语法("arg0", "arg1", "arg2")只有在表达式解析模式下才需要。

    argument 解析模式中 - 当你将参数传递给 command - 数组可以使用 更宽松的方式传递 语法 - 不带括号也不带引号(除非元素是包含空格或 PowerShell 元字符的 文字,例如,'arg 0'):

    # No parentheses around the array, elements unquoted.
    Exec-GradleScript foo.gradle  arg0, arg1, arg2
    

    有关 PowerShell 的两种基本解析模式的详细信息,请参阅this answer

    【讨论】:

      猜你喜欢
      • 2016-03-31
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 2022-10-20
      • 1970-01-01
      • 2012-10-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多