2017-03-17 179 views
0

我想传递一个字符串到一个Java程序作为命令行参数进行一些处理,并且它工作正常,除了传递String参数的场景有一些特殊字符(如$)。做一个SOP,我发现这个论证本身被一些随机数字而不是特殊字符扭曲了。这只发生在Linux中,并且只有当参数有一些特殊字符时才会发生。

$ java -jar testclient.jar String$$123 
String 1 = String31733123 
+3

引用它。 'java -jar testclient.jar'String $$ 123'' –

+1

'$$'是进程ID。如果您不希望shell将其替换为数字,则需要将其转义。例如''String $$ 123'' –

+0

那些(很可能都是这些)特殊的bash变量:https://www.gnu.org/software/bash/manual/html_node/Variable-Index.html - 你需要“逃脱“他们(例如:通过用引号括起你的参数) – UnholySheep

回答

1

这种情况仅在Linux中,只有当说法有一定的特殊字符。

这是因为它是Linux shell与$字符“搞乱”,而不是Java。

$是一个shell元字符。具体来说它引入了一个shell参数扩展。根据$字符后面的字符,shell将用其他字符替换它/它们。然后将修改的字符用于传递给java可执行文件的命令行参数。

你可以找到SHEL参数扩展的文件(对于“庆典”壳)位置:

注意的是,同样的事情也会发生在Mac OSX命令行和关于UNIX和Linux的其他方言。


如果你想为-,那么它需要被引用传递的$字符。这样做的各种方式此处所描述:

事实上,你应该阅读整个“打击”手动...或教程。从长远来看,它将为您节省大量时间。


有没有什么可以做,以确保Java的解析这些字符串输入,因为它是不使用转义序列?

不会。在Java看到命令行参数时已经完成了“损坏”。