Как удалить кавычки из системных свойств java

#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" , хотя мне это не особенно нравится, так как это может привести к другим проблемам, если ваш случай станет более сложным.