2017-10-06 47 views
1

我試圖將許多jvm參數傳遞給一個變量並將其導出並在其他腳本中調用,但參數中的空格和雙引號打敗了我。 ( 「/ 05 ABCDEF」)Bash導出並在腳本中使用引號和空格變量

我的代碼:

#!/bin/bash 
NORMAL_VARIABLE=-DNORMAL.NormalText=normal124 
PROBLEMATIC_VARIABLE='-DPROBLEM.ProblematicText="/05 abcdef"' 
SUM="$NORMAL_VARIABLE $PROBLEMATIC_VARIABLE" 
export SUM 

目標腳本:

java $SUM -jar "ApacheJMeter.jar" "[email protected]" 
在調試模式

實際輸出:

+ NORMAL_VARIABLE=-DNORMAL.NormalText=normal124 
+ PROBLEMATIC_VARIABLE='-DPROBLEM.ProblematicText="/05 abcdef"' 
+ SUM='-DNORMAL.NormalText=normal124 -DPROBLEM.ProblematicText="/05 abcdef"' 
+ export SUM 
+ java -DNORMAL.NormalText=normal124 '-DPROBLEM.ProblematicText="/05' 'abcdef"' -jar ApacheJMeter.jar 
Error: Could not find or load main class abcdef" 

人有一個想法如何解決這個問題?

我想:

java -DNORMAL.NormalText=normal124 -DPROBLEM.ProblematicText="/05 abcdef" -jar ApacheJMeter.jar 
+0

歡迎堆棧溢出。它是一個路徑/ 05 abcdef?或者在05目錄中名爲abcdef的文件等。因爲我可以看到錯誤消息,它告訴找不到類abcdef,讓我知道在同一 – RavinderSingh13

+0

嗨! 「/ 05 abcdef」是參數的值。 問題是巫調用Java: '的java -DNORMAL.NormalText = normal124 '-DPROBLEM.ProblematicText = 「/ 05' ' ABCDEF」'-jar ApacheJMeter.jar' 代替: '的java -DNORMAL.NormalText = normal124 -DPROBLEM.ProblematicText =「/ 05 abcdef」-jar ApacheJMeter.jar「 –

回答

1

如果你正在使用bash,你可以使用數組。

#!/bin/bash 
NORMAL_VARIABLE=-DNORMAL.NormalText=normal124 
PROBLEMATIC_VARIABLE=-DPROBLEM.ProblematicText="/05 abcdef" 
SUM=($NORMAL_VARIABLE "$PROBLEMATIC_VARIABLE") 

然後

java "${SUM[@]}" -jar "ApacheJMeter.jar" "[email protected]" 
+0

數組對PROBLEMATIC_VARIABLE有什麼好處?似乎如果它是單引號中的字符串,它的工作方式會相同。 –

+0

@TomFenech:確實如此。 – choroba

+0

我認爲需要單引號,否則雙引號將是句法。 –