2015-04-24 57 views
2

是否可以在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 
} 
+0

现在没有时间去看看,但还有另外一个关于这个问题的问题,我认为讨论结束了,看起来powershell语法分析器在某些情况下很容易混淆。 –

回答

5

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

的符号,你应该能够使用,让这个用花括号

${Dmaven.failsafe.debug} 

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

+0

是的,我使用了作为一种变通方法'函数MVN故障安全调试{ \t \t PARAM( \t \t \t [字符串] $ Dmaven_failsafe_debug =“ - Xdebug的-Xnoagent -Djava.compiler = NONE -Xrunjdwp:运输= dt_shmem,服务器= Y,地址= Maven的,暂停= n “的 \t \t \t,[参数(位置= 0,ValueFromRemainingArguments = $真)] \t \t \t $保持 \t \t) \t \t&” $ ENV:M2_HOME \仓\ mvn.bat“\'-Dmaven.failsafe.debug = $ Dmaven_failsafe_debug $ rema ins \t}' –