我在* profile.ps1文件中有以下定义:
if(Test-Path $env:M2_HOME){
function mvn{
$cmd = "$env:M2_HOME\bin\mvn.bat"
& $cmd $args
}
}
当我在powershell中使用此函数定义函数时,如:
function d { mvn help:describe $args }
使用like:
d -Dplugin=jar
一切都很好,而不是将后者定义为:
function d { mvn help:describe -Dplugin=$args }
使用like:
d jar
是否有一些内置处理这个角落的情况?
答案 0 :(得分:1)
通过调用函数获取参数你应该像这样使用
function test {
write-host $args[0]
write-host $args[1]
}
test stackoverflow powershell
输出
stackoverflow
powershell
stackoverflow
first argument
传递给函数,powershell
传递给函数second argument
对于传递给函数的每个参数
function test {
foreach ($a in $args){
write-host "output:$args"
}
}
测试1 2 3 4 5 6 7 8
输出:
test 1 2 3 4 5 6 7 8
output:1 2 3 4 5 6 7 8
output:1 2 3 4 5 6 7 8
output:1 2 3 4 5 6 7 8
output:1 2 3 4 5 6 7 8
output:1 2 3 4 5 6 7 8
output:1 2 3 4 5 6 7 8
output:1 2 3 4 5 6 7 8
output:1 2 3 4 5 6 7 8
为您的功能
if(Test-Path $env:M2_HOME){
function mvn{
$cmd = "$env:M2_HOME\bin\mvn.bat"
foreach ($arg in $args) {
& $cmd $args}
}
}
答案 1 :(得分:1)
看起来您只需要确保将参数作为字符串传递并确保首先评估它们:
function mvn{
$cmd = "$env:M2_HOME\bin\mvn.bat"
& $cmd $args
}
function d { mvn "help:describe" "-Dplugin=$($args)" }
答案 2 :(得分:0)
有人似乎已经a similar observation:
原因似乎-D
是powershell中的一个特殊字符,或多或少标记了由-D
确定的每个特定选项字符串的确切位置,至少对我的调用函数的这种修改对我有效:
function x {mvn help:describe `-Dplugin=$args}
当然,以某种方式处理托管功能中的这种情况会很好(我的* profile.ps1中的mvn
定义),但这些解决方案似乎超出了我的问题的范围。