#java #bash #escaping
Вопрос:
У меня есть bazinga
свойство, хранящееся в переменной среды
export OPTS="-Dbazinga="foo bar""
-bash-4.1$ echo $OPTS -Dbazinga="foo bar"
Кроме того, есть пример java-программы, которая просто выводит свое значение:
public class Main { public static void main(String[] args) { System.out.println(System.getProperty("bazinga", "")); } }
Когда я запускаю программу без использования переменной env, все работает нормально, то foo bar
есть выводится:
-bash-4.1$ java -Dbazinga="foo bar" Main foo bar
Тем не менее, я не могу запустить программу с использованием переменной, потому что мешают метки qoutation:
-bash-4.1$ java $OPTS Main Error: Could not find or load main class bar" -bash-4.1$ java "$OPTS" Main "foo bar"
Как я могу запустить программу, используя переменную env с правильной обработкой кавычек?
Комментарии:
1. Я не уверен, что обратные косые черты работают в оболочках Unix так же, как в коде Java. Попробуйте определить переменную среды таким образом:
export OPTS="-Dbazinga='foo bar'"
2. Теперь он печатает
'foo bar'
3. Даже когда вы запускаете его, используя
java $OPTS Main
без каких-либо кавычек в командной строке?4. Когда я бегу
java $OPTS Main
, то получаюError: Could not find or load main class bar'
5. Я полагаю, что это имеет смысл; кавычки в расширенном значении-это просто текст, а не метасимволы оболочки. Вы можете это сделать
bash -c "java $OPTS Main"
, хотя мне это не особенно нравится, так как это может привести к другим проблемам, если ваш случай станет более сложным.