linux中的特殊字符($)处理&;JAVA

linux中的特殊字符($)处理&;JAVA,java,linux,special-characters,sign,dollar-sign,Java,Linux,Special Characters,Sign,Dollar Sign,我试图将一个字符串作为命令行参数传递给java程序进行一些处理,它工作正常,但传递的字符串参数有一些特殊字符(如$)的情况除外。做一个SOP,我发现参数本身被一些随机数而不是特殊字符扭曲了。这仅在Linux中发生,并且仅当参数具有某些特殊字符时才会发生 $ java -jar testclient.jar String$$123 String 1 = String31733123 这仅在Linux中发生,并且仅当参数具有某些特殊字符时才会发生 $ java -jar testclient.j

我试图将一个字符串作为命令行参数传递给java程序进行一些处理,它工作正常,但传递的字符串参数有一些特殊字符(如$)的情况除外。做一个SOP,我发现参数本身被一些随机数而不是特殊字符扭曲了。这仅在Linux中发生,并且仅当参数具有某些特殊字符时才会发生

$ java -jar testclient.jar  String$$123
String 1 = String31733123
这仅在Linux中发生,并且仅当参数具有某些特殊字符时才会发生

$ java -jar testclient.jar  String$$123
String 1 = String31733123
这是因为Linux shell“弄乱”了
$
字符,而不是Java

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

您可以在此处找到shel参数扩展(用于“bash”shell)的文档:

请注意,同样的事情也会发生在MacOSX命令行以及UNIX和Linux的其他方言上


如果希望按原样传递
$
字符,则需要将其引用。以下介绍了各种方法:

事实上,您可能应该阅读整个“bash”手册。。。或者是教程。从长远来看,这将为你节省大量时间


有没有什么方法可以确保java在不使用转义序列的情况下按原样解析这些字符串输入


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

引用它
java-jartestclient.jar'String$$123'
$$
是进程id。如果不希望shell用数字替换它,则需要对其进行转义。e、 例如,
“String$$123”
这些(很可能都是)特殊的bash变量:-您需要“转义”它们(例如:用引号括住参数),但此问题会发生在其他特殊字符上,如!、$、&,(,)在Linux中也是如此。有没有什么方法可以确保java在不使用转义序列的情况下按原样解析这些字符串输入?