【问题标题】:Bash export and use variable with quotes and space in scriptBash 导出并在脚本中使用带引号和空格的变量
【发布时间】:2017-10-06 07:59:31
【问题描述】:

我正在尝试将许多 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

【问题讨论】:

  • 欢迎堆栈溢出。它是路径 /05 abcdef 吗?或 05 目录中名为 abcdef 的文件等。因为我可以在错误消息中看到它告诉无法找到类 abcdef,请在同一时间告诉我
  • 嗨! “/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

标签: linux bash scripting escaping


【解决方案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" "$@"

【讨论】:

  • 数组对PROBLEMATIC_VARIABLE有什么好处?如果它是单引号中的字符串,似乎它会起作用。
  • @TomFenech:是的,已修复。
  • 我认为单引号是必须的,否则双引号是语法错误。
  • @choroba 你的版本当我运行 bash -x test.sh java -DNORMAL.NormalText=normal124 '-DPROBLEM.ProblematicText=/05 abcdef' -jar ApacheJMeter.jar 如何摆脱'?
  • @PatrykDadas:为什么?你需要它们,否则abcdef 将是一个不同的参数。
猜你喜欢
  • 2012-11-15
  • 2021-10-03
  • 2011-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多