具有多个字符串参数的 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\""被拆分为somedata(或"somedata "

【讨论】:

以上是关于具有多个字符串参数的 Bash 脚本的主要内容,如果未能解决你的问题,请参考以下文章

Python:子进程并运行具有多个参数的 bash 脚本

Bash 脚本:避免空字符串参数

sh check bash参数有一些字符串检查脚本参数是否包含某个字符串

bash脚本返回值应用

linux shell bash 内置变量参考

具有多个强制性选项的 bash getopts