2015-04-24 78 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}' –