Bash在脚本中导出和使用带引号和空格的变量

时间:2017-10-06 07:59:31

标签: linux bash scripting escaping

我试图将许多jvm参数传递给一个变量并将其导出并调用其他脚本,但参数中的空格和双引号打败了我。 (" / 05 abcdef")

我的代码:

#!/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" "$@"

调试模式下的实际输出:

+ 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

1 个答案:

答案 0 :(得分:2)

如果您正在使用bash,则可以使用数组。

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

然后

java "${SUM[@]}" -jar "ApacheJMeter.jar" "$@"