Как передать литерал переменной ссылки ($ {foo}) в качестве аргумента программы в конфигурации запуска

В Eclipse, когда вы указываете аргументы в диалоговом окне запуска, Eclipse интерпретирует ${foo} как запрос использовать переменную Eclipse foo. Я хотел бы передать строку в мое приложение, содержащее ${foo}, но Eclipse рассматривает это как переменную undefined и дает мне ошибку.

 -Dfoo "bar" --pattern "regex magic ${foo}"

Eclipse не принимает одиночную кавычку (') в качестве символа цитирования, вместо этого она становится частью ввода. Кто-нибудь знает, как я могу избежать ${foo} в этом диалоговом окне, чтобы его интерпретировали как текст, а не ссылку на переменную?

Ответ 1

Вы должны определить переменную в Eclipse: name = доллар, value = $

(Это можно сделать в диалоговом окне "Конфигурация запуска", когда вы вводите свои аргументы, нажмите "Переменные...", а затем нажмите "Редактировать переменные..." и добавьте эту переменную).

Затем в текстовом поле аргументов введите $ {Доллар} "{Foo}"

Ответ 2

${foo} сам по себе может быть экранирован с помощью $"{foo}".

Когда ${foo} уже является частью строки с двумя кавычками, как в вашем вопросе, я не уверен, как или если это может быть экранировано.

Ответ 3

Я не думаю, что в Eclipse есть какой-то способ.

Оскорбительный бит кода org.eclipse.core.internal.variables.StringSubstitutionEngine # substitute.

Это бит кода, который заменяет ${foo} тем, что вы определили как foo. К сожалению, он может справиться с вложенными и конкатенированными переменными, поэтому, если доллар = "$" и rest = "{foo}", то ${dollar} ${rest} дает ${foo}, который снова оценивается.

Для информации, в коде reportUndefinedVariables жестко закодирован как истинный дальше по стеку, поэтому вы получаете сообщение об ошибке. Кажется, что нет никакого способа его изменить.