Как передать литерал переменной ссылки ($ {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 жестко закодирован как истинный дальше по стеку, поэтому вы получаете сообщение об ошибке. Кажется, что нет никакого способа его изменить.