在eclipse中运行Java app时如何避免glob扩展

sjl*_*lee 10 java eclipse shell wildcard expansion

我遇到了Eclipse运行配置的特殊行为,它似乎只是一个Windows问题.假设我有一个Java应用程序打印出命令行参数,如下所示:

public class WildCard {
    public static void main(String[] args) {
        for (String arg: args) {
            System.out.println(arg);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我使用可以由shell扩展的外卡提供参数,shell将展开它并将其提供给Java程序.这并不奇怪.所以,如果我在命令提示符下做

java WildCard test/*
Run Code Online (Sandbox Code Playgroud)

该程序将打印

test/foo.txt
test/bar.txt
Run Code Online (Sandbox Code Playgroud)

其中foo.txt和bar.txt是目录"test"中的文件.

如果我用引号括起通配符参数,可以防止Shell扩展;*nix上的单引号,以及Windows上的双引号.所以对于Windows,如果我在命令提示符下执行以下操作:

java WildCard "test/*"
Run Code Online (Sandbox Code Playgroud)

该程序现在将打印

test/*
Run Code Online (Sandbox Code Playgroud)

(没有扩张).

但是,我发现Eclipse运行启动器中的引用似乎没有效果,并且参数仍在扩展.如果我放

"test/*"
Run Code Online (Sandbox Code Playgroud)

在Eclipse运行启动程序的程序参数部分,并运行上面的类,我仍然得到

test/foo.txt
test/bar.txt
Run Code Online (Sandbox Code Playgroud)

换句话说,当程序实际运行时,双引号似乎丢失了.这似乎只发生在Windows上.

有没有办法在Windows上使用Eclipse运行启动器阻止glob扩展?

小智 0

这个问题看起来很复杂:

*.txt
foo.*
Run Code Online (Sandbox Code Playgroud)

不会被扩展,但是

*
*.*
"*"
"*.*"
\"*\"
\"*.*\"
Run Code Online (Sandbox Code Playgroud)

将被扩大。

看起来只有“所有文件”被扩展,但所有其他字符串(包括 *)将保持不变。

我遇到同样的问题,我使用 XP 和 eclipse 3.5.2