功能参数名称中的点

时间:2015-04-24 12:00:15

标签: maven powershell maven-3 powershell-v3.0

在powershell中是否可以使用带圆点的参数名称?显而易见的方法 - 请参阅Dmaven.failsafe.debug失败:

function mvn-failsafe-debug {
  param (
    [string] $Dmaven.failsafe.debug="-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_shmem,server=y,address=Maven,suspend=n",
    [parameter(Position=0, ValueFromRemainingArguments=$true)]
    $args
  )
  & "$env:M2_HOME\bin\mvn.bat" $args
}

2 个答案:

答案 0 :(得分:6)

Windows PowerShell Language Specification Version 3.0 2.3.4参数部分表示

parameter-char:
Any Unicode character except
    {   }   (   )   ;   ,   |   &   .   [
    colon
    whitespace
    new-line-character

因此,点实际上不是有效的参数名称字符。

有趣的是,可以使用像${...}

这样的点来定义参数
param (
    [string] ${Dmaven.failsafe.debug}
)

PowerShell允许上述内容。但是在调用命令时很难指定这样的参数名称。

一些实验:

function Test-ParameterWithDots {
    param(
        [string]${Parameter.With.Dots}
    )
    "Parameter : ${Parameter.With.Dots}"
}

# OK
Test-ParameterWithDots value1

# not OK
Test-ParameterWithDots -Parameter.With.Dots value2

# workaround with splatting
$params = @{ 'Parameter.With.Dots' = 'value3' }
Test-ParameterWithDots @params

输出:

Parameter : value1
Parameter : .With.Dots
Parameter : value3

因此,通过spatting我们仍然可以指定这样的参数名称。

答案 1 :(得分:1)

您应该能够使用的符号是花括号

${Dmaven.failsafe.debug}

当名称包含特殊字符时使用。输入camelCase通常是定义变量的首选方法。