java - 在 Eclipse 中运行 Java 应用程序时如何避免 glob 扩展

标签 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);
        }
    }
}

如果我为参数提供一个可以由 shell 扩展的通配符,shell 将扩展它并将其提供给 Java 程序。这并不奇怪。所以,如果我在命令提示符下执行

java WildCard test/*

程序会打印

test/foo.txt
test/bar.txt

其中 foo.txt 和 bar.txt 是目录“test”中的文件。

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

java WildCard "test/*"

程序现在将打印

test/*

(无扩展)。

不过,我发现Eclipse run launcher中的引号好像没有作用,而且还是展开了论点。如果我把

"test/*"

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

test/foo.txt
test/bar.txt

也就是说,双引号好像在程序真正运行的时候丢失了。这似乎只发生在 Windows 上。

有没有一种方法可以防止在 Windows 上使用 Eclipse 运行启动器进行 glob 扩展?

最佳答案

这个问题看起来很连线:

*.txt
foo.*

不会展开,但是

*
*.*
"*"
"*.*"
\"*\"
\"*.*\"

将展开。

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

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

关于java - 在 Eclipse 中运行 Java 应用程序时如何避免 glob 扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3861086/

相关文章:

java - 我应该如何正确地将 mp3 转换为字节数组,然后将其转换回 mp3

java - 线程 "main"java.lang.NoClassDefFoundError : Xms256M 中出现异常

shell - 使环境变量永久化

java - java中如何查找数组中某个对象的类型

java - 字符串UTF-8转换问题

java - API 29 中的 AndroidStudio getExternalStoragePublicDirectory

java - GWT 上传示例不起作用?

java - UIAutomator 在 Linux 上构建时运行 0 个测试,但在其他平台上运行良好

shell - shell中 'if [ -s filename]'是什么意思?

bash - Jenkins - 执行 Shell 构建步骤不起作用