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
相关产品推荐
相关产品推荐

