如何在 shell 脚本中正确连接字符串?

如何在 shell 脚本中正确连接字符串?

我有一个 bash 脚本需要修改。我必须设置一个变量,然后调用另一个脚本。我的变量,EXTRA_JAVA_OPTIONS必须是

-javaagent:myagent.jar="-d 0 -i 1000 -l log2 -c log1"

所以我所做的是

export EXTRA_JAVA_OPTIONS="-javaagent:myagent.jar=\"-d 0 -i 1000 -l log2 -c log1 \""

然后我调用我的脚本,脚本内有以下内容:

"$JAVACMD" "$EXTRA_JAVA_OPTIONS"

但是,这不会产生我想要的结果。运行 bash -x 我可以看到

+ /usr/java/jdk1.6.0_38/bin/java '-javaagent:myagent.jar="-d 0 -i 1000 -l log2 -c log1"'

如果相反我这样做:

"$JAVACMD" $EXTRA_JAVA_OPTIONS

我得到了不同版本的输出,这也是错误的

+ /usr/java/jdk1.6.0_38/bin/java '-javaagent:myagent.jar="-d' 0 -i 1000 -l log2 -c 'log1"'

如何防止'在打印字符串或由 shell 添加字符串时出现?

答案1

使用数组是保持包含空格的参数完整的安全方法:

EXTRA_JAVA_OPTIONS=(-javaagent:myagent.jar="-d 0 -i 1000 -l log2 -c log1")
"$JAVACMD" "${EXTRA_JAVA_OPTIONS[@]}"

答案2

引号只是为了防止按单词分割。但你已经对整个事情进行了引用。

export EXTRA_JAVA_OPTIONS="-javaagent:myagent.jar=-d 0 -i 1000 -l log2 -c log1"

相关内容