linux中的特殊字符($)处理&;JAVA
我试图将一个字符串作为命令行参数传递给java程序进行一些处理,它工作正常,但传递的字符串参数有一些特殊字符(如$)的情况除外。做一个SOP,我发现参数本身被一些随机数而不是特殊字符扭曲了。这仅在Linux中发生,并且仅当参数具有某些特殊字符时才会发生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 -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)的文档:
如果希望按原样传递
$
字符,则需要将其引用。以下介绍了各种方法:
有没有什么方法可以确保java在不使用转义序列的情况下按原样解析这些字符串输入
不会。Java看到命令行参数时,“损坏”已经完成。引用它
java-jartestclient.jar'String$$123'
$$
是进程id。如果不希望shell用数字替换它,则需要对其进行转义。e、 例如,“String$$123”
这些(很可能都是)特殊的bash变量:-您需要“转义”它们(例如:用引号括住参数),但此问题会发生在其他特殊字符上,如!、$、&,(,)在Linux中也是如此。有没有什么方法可以确保java在不使用转义序列的情况下按原样解析这些字符串输入?