当我传递!clear作为输入时,下面的Java代码打印两个参数,如下所示.
class Test{ public static voID main(final String... arguments){ for(String argument : arguments){ System.out.println(argument); } }}
输出:
$java Test !clearjava Test clearclear
UPDATE
使用任何linux命令代替clear都会产生相同的结果.
$java Test !pwdjava Test pwdpwd$java Test !lsjava Test lsls
我知道这与bash中的历史扩展有关,我可以逃脱!解决这个问题的角色.
但是,我很想知道此代码将上述两行打印为输出的确切原因.有人可以解释一下吗?
最佳答案您正在Unix / linux shell中工作,可能是bash.的! character是Unix shell中的特殊字符,因此您的命令被视为历史扩展.在历史扩展中,通常发生的事情是shell会向您显示命令扩展到的内容.如果您在历史记录中清除了命令,那么!clear的扩展将很简单,因此扩展命令将是java Test clear.然后shell运行命令. Java运行并且只看到一个参数 – 清楚,这就是它打印的内容.
相反,如果你运行
java Test '!clear'
(用单引号!)
Java将获得参数!明确,没有历史扩展.
如果您使用的单词不在shell的命令历史记录中,您将收到“未找到事件错误”.如果你使用一个单词,在你的shell历史中,用一个参数启动一个命令,整个命令及其所有参数都将被替换.这是bash的一部分,而不是Java.
总结以上是内存溢出为你收集整理的为什么这个Java代码打印两个参数?全部内容,希望文章能够帮你解决为什么这个Java代码打印两个参数?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)