具有多个字符串参数的 Bash 脚本
Posted
技术标签:
【中文标题】具有多个字符串参数的 Bash 脚本【英文标题】:Bash script with multiple string arguments 【发布时间】:2012-04-17 18:38:18 【问题描述】:我在分隔两个字符串变量作为 bash 脚本的参数时遇到问题。我的 bash 脚本接受两个参数,如下所示:
#!/bin/bash
DATA1=$1
DATA2=$2
但是,DATA1 和 DATA2 不是我想要的,因为 bash 错误地读取了我的字符串。 DATA2 只是我想提出的论点的第一部分,因为我无法将复杂(相对)的字符串变成单个争论。
我从一个 Java 应用程序调用这个脚本,变量如下:
String m1 = "some data";
String m2 = "some more"+mystring+"even more data"+anotherstring;
myscript.sh m1 m2
只有 m2 的第一部分被传递给 bash 脚本中的 DATA1。我尝试将整个内容用单引号和双引号括起来,但我无法让它接受整个 m2 作为第二个参数。
感谢任何有关创建两个字符串参数的帮助。
【问题讨论】:
我认为问题更可能出在 Java 端而不是 Bash 端。你是如何启动脚本的? 您将不得不显示用于从 Java 调用脚本的确切代码(Runtime.exec()
?、ProcessBuilder
?),包括设置参数的代码。否则我们只是猜测。
m2 的第一部分被传递给 DATA1?你的意思是 m2 的第一部分被传递给 DATA2?
【参考方案1】:
它对我有用,请参阅:
Runtime.getRuntime().exec(new String[]"/bin/sh", "/tmp/myscript.sh", m1,m2);
您的代码调用:Runtime.getRuntime().exec(String)
它调用方法exec(command,null,null)
(参见src.zip中的源代码)exec(String command, String[] envp, File dir)。
方法 exec(String command, String[] envp, File dir) 由 StringTokenizer 解析命令。所以文本"some data"
或"\"some data\""
被拆分为some
data
(或"some
data "
)
【讨论】:
以上是关于具有多个字符串参数的 Bash 脚本的主要内容,如果未能解决你的问题,请参考以下文章