我想在我的Java程序中执行shell脚本,并传递如下所示的参数:
Runtime.getRuntime().exec("./test.sh " + "\\\"param1\\\"\\\"param2\\\"\\\"param3\\\"");
然后test.sh将调用另一个传递字符串参数的java程序,如下所示:
another.jar \"param1\"\"param2\"\"param3\"
最后程序anther.jar将以这种格式解释参数
another.jar "param1""param2""param3"
我对此感到有些困惑,因为在这种情况下我无法正确处理转义字符。
我在第一个命令中尝试了一些字符串格式,但没有获得正确的格式。
一些帮助就可以了!
谢谢!
我认为您最好使用 exec(String [] cmdarray) 而不是 exec(String cmd) 。这是因为 exec(String cmd) 通过 StringTokenizer 标记了参数,而在分解命令行参数时根本不注意双引号。
尝试这样的事情:
ArrayList<String> argList = new ArrayList<String>(); argList.add("param1"); argList.add("param2"); argList.add("param2"); String[] args = argList.toArray(new String[argList.size()]); Runtime.getRuntime().exec("mycommand", args);
除了Java源代码字符串文字可能需要转义外,param值内的字符不需要引号或转义。