我正试图将字符串作为命令行参数传递给java程序,以便进行某些处理,它工作得很好,除了传递的字符串参数有一些特殊字符(如$)的情况。做一个SOP,我发现参数本身被一些随机数而不是特殊字符扭曲了。这只在Linux中发生,并且只有当参数具有一些特殊字符时才会发生。
$ java -jar testclient.jar String$$123
String 1 = String31733123
最佳答案
这只在Linux中发生,并且只有当参数具有一些特殊字符时才会发生。
这是因为Linux外壳“搞乱”了$
字符,而不是Java。$
是shell元字符。具体介绍了一种shell参数展开方法。根据$
字符后面的字符,shell将用其他字符替换它/它们。修改后的字符用于传递给java
可执行文件的命令行参数。
您可以在这里找到shel参数扩展(用于“bash”shell)的文档:
https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html
注意,在Mac OSX命令行和UNIX和Linux的其他方言上也会发生同样的事情。
如果要按原样传递$
字符,则需要引用它。这里描述了各种方法:
https://www.gnu.org/software/bash/manual/html_node/Quoting.html#Quoting
事实上,你应该阅读整个“bash”手册。。。或者一个教程。从长远来看,这会节省你很多时间。
有没有什么方法可以确保java在不使用转义序列的情况下按原样解析这些字符串输入?
不,“损害”已经在Java看到命令行参数时造成了。