当'$';或'&';在java命令行中用作参数

当'$';或'&';在java命令行中用作参数,java,Java,当我在java参数中传递“$”或“&”作为数据的一部分时,我得到了数据截断。我知道这个问题可以通过在“$”之前使用转义字符“\”来解决,但我不明白为什么我们只看到“$”或“&”,而没有看到任何其他特殊字符,如“@”、“#”、“%”、“^”或“*” 下面是复制此错误的独立测试用例 import java.util.Arrays; public class Main{ public static void main(String [] args) { System.

当我在java参数中传递“$”或“&”作为数据的一部分时,我得到了数据截断。我知道这个问题可以通过在“$”之前使用转义字符“\”来解决,但我不明白为什么我们只看到“$”或“&”,而没有看到任何其他特殊字符,如“@”、“#”、“%”、“^”或“*”

下面是复制此错误的独立测试用例

import java.util.Arrays;
public class Main{

    public static void main(String [] args)
    {
        System.out.println(Arrays.toString(args));
        System.out.println(args[0]);
    }
}
输入

输出

[name=Daniel]
name=Daniel

这不是Java的问题——这是您的shell;运行代码的命令行<代码>$通常用于shell中的变量替换<代码>&通常用于后台进程。使用echo可以看到相同的结果:

$echo name=Daniel$Burgers
输出:

name=Daniel
name=Daniel$Burgers
如果将该值放在单引号中,则会告诉shell在字符串结束之前不要执行任何特殊操作(另一个单引号):

$echo'name=Daniel$Burgers'
输出:

name=Daniel
name=Daniel$Burgers

同样的更改应该修复Java调用。

这不是Java问题,而是您的shell;运行代码的命令行<代码>$通常用于shell中的变量替换<代码>&通常用于后台进程。使用echo可以看到相同的结果:

$echo name=Daniel$Burgers
输出:

name=Daniel
name=Daniel$Burgers
如果将该值放在单引号中,则会告诉shell在字符串结束之前不要执行任何特殊操作(另一个单引号):

$echo'name=Daniel$Burgers'
输出:

name=Daniel
name=Daniel$Burgers

同样的更改应该会修复Java调用。

作为补充说明,您也可以通过引用字符串来解决问题,例如
Java Main name=“Daniel$Burgers”
@AlexandruSomai:我怀疑使用双引号是行不通的。但是单引号可以。是的,它适用于单引号。shell会更改输入的含义。我认为这与Java无关,而是shell解释命令字符串,甚至在它传递给
Java
之前。作为补充说明,您也可以通过引用字符串来解决问题,例如
Java主名称=“Daniel$Burgers”
@AlexandruSomai:我怀疑使用双引号是行不通的。但是单引号是行不通的。是的,它适用于单引号。shell改变了输入的含义。我认为这与Java无关,而是shell解释命令字符串,甚至在它被传递到
Java
之前。