在实际的工作中,有同事有需求要在Tomcat的启动脚本中添加启动参数,而且启动参数中带有特殊的字符'$',在实际的应用程序中,使用System.getProperty()进行获取设置的值,但是这个字符会解析不出来。
比如想在脚本中获取`aa`的值,预设值为'abc$123'
JAVA_OPTS="$JAVA_OPTS "-Daa="abc$123"
在代码中我想通过System.getProperty("aa"),获取到的值为"abc$123"
获取属性的jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.util.*"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Insert title here</title> </head> <body> <h1>WELCOME</h1> <% String value = System.getProperty("aa"); out.println(value); %> </body> </html>
但是实际呢,获取的值为`abcrun23`
但是在windows下直接加入到setvmargs.bat中如下设置,能够获取到正常值
set JAVA_OPTS=%JAVA_OPTS% -Daa="abc$123"
猜测是由于在Linux下,将$1作为当前调用脚本的第一个参数给替换了,因为我使用的是./catalina.sh run,所以就将$1替换成了run
如何解决呢?
经过各种实验,最终发现,可以通过转义符号与单引号混用,才可以避免替换
使用的为
JAVA_OPTS="$JAVA_OPTS "-Daa="abc'$'123"