请注意:即使这个问题涉及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?
答案 0 :(得分:1)
那里的问题与groovy或grails无关。 $...
将从您的shell中替换:
$ echo "8cv$5)iEIm8K"
8cv)iEIm8K
您必须正确引用具有敏感字符的变量。例如-DfizzPassword='8cv$5)iEIm8K'
(请注意单引号)