You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Shell脚本字符转义失败求助:JVM参数配置报错

问题描述

我配置了如下Windows批处理脚本(注:这是.cmd/.bat格式的Windows脚本,并非Shell脚本):

set "JSSE_OPTS=-Djdk.tls.ephemeralDHKeySize=2048"
set "JAVA_OPTS=%JAVA_OPTS% %JSSE_OPTS%"
set "PATH_OPTS=-Drelaxed-path-chars=^"\"^<^>[\\]^`{^|}"^"
set "JAVA_OPTS=%JAVA_OPTS% %PATH_OPTS%"
set "QUERY_OPTS=-Drelaxed-query-chars=^"\"^<^>[\\]^`{^|}"^"
set "JAVA_OPTS=%JAVA_OPTS% %QUERY_OPTS%"

运行时出现报错:

There should be no > at this time.

需求是通过JVM参数配置允许特殊字符:

relaxed-path-chars: \"<>[\]^`{|}
relaxed-query-chars: \"<>[\]^`{|}
解决方法

问题根源是Windows批处理的特殊字符转义逻辑错误,以下是修正后的两种可行方案:

方案一:双引号内直接转义(推荐)

利用Windows批处理中双引号包裹变量时的转义规则,内部双引号仅用\转义即可,其他特殊字符无需额外转义:

set "JSSE_OPTS=-Djdk.tls.ephemeralDHKeySize=2048"
set "JAVA_OPTS=%JAVA_OPTS% %JSSE_OPTS%"
set "PATH_OPTS=-Drelaxed-path-chars=\"<>[\]^`{|}"
set "JAVA_OPTS=%JAVA_OPTS% %PATH_OPTS%"
set "QUERY_OPTS=-Drelaxed-query-chars=\"<>[\]^`{|}"
set "JAVA_OPTS=%JAVA_OPTS% %QUERY_OPTS%"

方案二:全局转义特殊字符

不依赖双引号内部规则,用批处理的转义符^处理所有特殊字符:

set JSSE_OPTS=-Djdk.tls.ephemeralDHKeySize=2048
set JAVA_OPTS=%JAVA_OPTS% %JSSE_OPTS%
set PATH_OPTS=-Drelaxed-path-chars=^"^<^>[\]^`{^|}
set JAVA_OPTS=%JAVA_OPTS% %PATH_OPTS%
set QUERY_OPTS=-Drelaxed-query-chars=^"^<^>[\]^`{^|}
set JAVA_OPTS=%JAVA_OPTS% %QUERY_OPTS%

验证方式

在脚本末尾添加echo %JAVA_OPTS%,执行后查看输出是否符合预期:

echo %JAVA_OPTS%

预期输出应包含:
-Djdk.tls.ephemeralDHKeySize=2048 -Drelaxed-path-chars="<>[\]^{|}" -Drelaxed-query-chars="<>[]^{|}"

内容的提问来源于stack exchange,提问作者wenliangzeng-coder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 17:40:15