Java 命令行参数:简单打印不适用于“@%&^%”(不带引号)。请解释

Java command line argument: Simple print not working with "@%&^%" (without quotes). Please explain

这是一个名为 Java class 的测试:

public class Test
{
    public static void main(String[] args)
    {
        System.out.print(args[0]);
    }
}

当我用参数“Bob”编译并运行它时,不带引号,例如:java Test.java Bob,它运行很好并打印“嗨,鲍勃。如何你是?”。在终端上,一切顺利:

xyz@my-iMac src % java Test.java Bob    
Bob

现在,当我使用不带引号的参数“@%&^%”时,例如:java Test.java @%&^%,我在终端上得到了这个:

xyz@my-iMac src % java Test.java @%&^%
[1] 12097
zsh: command not found: ^%
xyz@my-iMac src % @%
[1]  + done       java Test.java @%
xyz@my-iMac src % 

我正在使用 MacOS 终端 zsh 进行编译和 运行 java。 MacOS 上的用户名是 xyz,iMac 的名称是 my-iMac。文件 Test.java 位于文件夹 src.

我猜是终端在做有趣的事情。但是我不知道是什么或者我可能是错的。

谁能解释一下这是怎么回事。

字符 & 在大多数 shell 中表示“运行 this in the background”。

然后 zsh 尝试执行下一个 ^% 这确实是一个不存在的命令。

如果你加上引号(正如你已经尝试过的那样)或用 \ 保护 & 那么它就可以工作

java Test.java @%\&^%
@%&^%