gpt4 book ai didi

java - 为什么这个 Java 代码打印两个参数?

转载 作者:IT王子 更新时间:2023-10-29 00:54:30 29 4
gpt4 key购买 nike

当我传递 !clear 作为输入时,下面的 Java 代码打印两个参数,如下所示。

class Test{

public static void main(final String... arguments){
for(String argument : arguments){
System.out.println(argument);
}
}

}

输出:

$ java Test !clear
java Test clear
clear

更新

使用任何 linux 命令代替 clear 都会产生相同的结果。

$ java Test !pwd
java Test pwd
pwd

$ java Test !ls
java Test ls
ls

我知道这与 bash 中的历史扩展有关,我可以逃脱 !性格来解决这个问题。

但是,我很想知道这段代码打印以上两行作为输出的确切原因。有人可以解释一下吗?

最佳答案

您正在 Unix/Linux shell 中工作,可能是 bash! 字符是 Unix shell 中的特殊字符,因此您的命令被视为历史扩展。

在历史扩展中,通常发生的事情是 shell 向您显示命令扩展到的内容。 !clear 的扩展将只是clear前提是您的历史记录中有命令clear,并且因此,扩展命令将是 java Test clear。 shell 然后运行 命令。 Java 运行并且只看到一个参数 - clear,这就是它打印的内容。

如果相反,你运行

java Test '!clear'

(带单引​​号!)

Java 将按原样获取参数 !clear,无需历史扩展。

如果您使用的词不在 shell 的命令历史记录中,您将收到“找不到事件错误”。如果您使用的单词在您的 shell 历史记录中启动了带参数的命令,则整个命令及其所有参数将被替换。这是 bash 而不是 Java 的全部内容。

关于java - 为什么这个 Java 代码打印两个参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45059081/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com