Как избежать расширения glob при запуске приложения Java в eclipse

Я сталкиваюсь с особенным поведением конфигурации запуска Eclipse и, похоже, является проблемой только для Windows. Предположим, у меня есть приложение Java, которое выводит аргументы командной строки, например:

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

Если я предоставляю аргумент с дикой картой, которая может быть расширена оболочкой, оболочка будет расширять ее и передавать ее в программу Java. Это не удивительно. Итак, если я сделаю в командной строке

java WildCard test/*

программа распечатает

test/foo.txt
test/bar.txt

где foo.txt и bar.txt являются файлами в каталоге "test".

Расширения оболочки можно предотвратить, если я окружаю аргумент подстановки в кавычках; одиночные кавычки на * nix и двойные кавычки в Windows. Поэтому для Windows, если я сделаю следующее в командной строке:

java WildCard "test/*"

программа теперь будет печатать

test/*

(без расширения).

Тем не менее, я нахожу, что цитирование в запуске запуска Eclipse, похоже, не имеет эффекта, и аргумент все еще расширяется. Если я поставлю

"test/*"

в разделе аргументов программы в запуске запуска Eclipse и запустить указанный класс, я все равно получаю

test/foo.txt
test/bar.txt

Другими словами, двойные кавычки, кажется, теряются, когда программа действительно выполняется. Это похоже на Windows.

Есть ли способ предотвратить расширение glob с помощью запуска запуска Eclipse в Windows?

Ответ 1

Проблема выглядит довольно проводной:

*.txt
foo.*

НЕ будет расширен, но

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

будет расширен.

Похоже, что расширяется только "все файлы", но все остальные строки (включая *) остаются неизменными.

У меня та же проблема, и я использую XP и eclipse 3.5.2

Ответ 2

Шаблон (.*) не будет расширяться затмением и будет работать как регулярное выражение.