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

标签 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" "$@"

Debug模式下的实际输出:

+ 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

最佳答案

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

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

然后

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

关于linux - Bash 导出并在脚本中使用带引号和空格的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46601021/

相关文章:

php - tcp 消息不完整

linux - 不使用 awk 或 sed 对字符串进行排序

windows - Windows 注册表中的应用程序显示名称部分匹配?

java - 如何使用 java 有效地加载 native 共享对象

linux - USB HID OUT 报告 - 哪个端点是正确的?

linux - 将文件移动到同一目录中具有旧扩展名的文件

git - 有没有办法在一个命令中使用用户名和密码从 gitlab 克隆?

macos - 用于打开新 iTerm 窗口并运行基于变量的命令的 OSX 脚本

regex - 使用 perl 脚本从字符串中删除特殊字符

C# 嵌入脚本解释器时限制命名空间