Groovy(可能是Grails)错误地转义命令行参数

时间:2016-01-14 11:43:40

标签: grails

请注意:即使这个问题涉及Grails,我几乎100%确定这是一个纯粹的Groovy问题。

我有一个Grails应用程序(Grails 2.4.5,Groovy 2.4.3),它在运行时从命令行接受一些系统属性:

grails -Dfoo=2 -DfizzPassword="8cv$5)iEIm8K" run-app --stacktrace

在我的代码中,我然后以字符串值读取那些sys道具:

String foo = System.getProperty('foo')
String fizzPassword = System.getProperty('fizzPassword')

但是,因为" fizzPassword "财产有" $5"在其中,Groovy以某种方式逃脱它:

void doSomething() {
    String foo = System.getProperty('foo')
    String password = System.getProperty('fizzPassword')

    // Prints: "Password read was: 8cv)iEIm8K."
    //
    // When it should be printing: "Password read was 8cv$5)iEIm8K."
    println "Password read was: ${password}."
}

关于如何将fizzPassword sys prop传递到应用程序,然后将其作为String读取,没有 Groovy转义/忽略" {的任何想法{1}}" (可能还有其他类似的东西)?简而言之:如何让Groovy逐字地从命令行读取sys props?

1 个答案:

答案 0 :(得分:1)

那里的问题与groovy或grails无关。 $...将从您的shell中替换:

$ echo "8cv$5)iEIm8K"
8cv)iEIm8K

您必须正确引用具有敏感字符的变量。例如-DfizzPassword='8cv$5)iEIm8K'(请注意单引号)