我有一个Java应用程序,它使用我创建的-D系统属性。我有问题让其中一个正确翻译。
在我的本地计算机上的测试环境(localhost)中,我使用IntelliJ Idea IDE运行Windows,并通过IDE输入-D系统属性,如下所示:
-Dproperty={\"prop1\":\"val1\",\"prop2\":\"val2\"}
我转义双引号,因为它们需要与字符串文字分开。上面的属性有效,包括花括号在内的整个值都存储为字符串文字。
将此应用程序部署到Linux云环境时会出现问题。我认为架构的不同导致系统属性无法正确读取。在bash中,我找到所有-D系统属性的进程ID,并执行ps -fwwp [processId]
命令。我看到上面的属性被分解成一堆较小的属性,如下所示:
-Dproperty=prop1:val1
-Dproperty=prop2:val2
-Dproperty=prop3:val3
等...
这导致我的应用程序中使用此属性的部分失败。我尝试过一堆转义方法,但没有一个能正常工作。
如何以这样的方式转义此系统属性:将值视为字符串文字{"prop1":"val1","prop2":"val2"}
答案 0 :(得分:1)
Bash需要转义花括号,如:
-Dproperty=\{\"prop1\":\"val1\",\"prop2\":\"val2\"\}
另一种选择是尝试用单引号括起整个字符串。 Bash不会在单引号内进行任何扩展:
-Dproperty='{"prop1":"val1","prop2":"val2"}'
我不知道哪个选项更容易与您的Windows环境兼容。