2017-10-06 86 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

我认为需要单引号,否则双引号将是句法。 –