繁体   English   中英

如何将参数传递给命令行Java程序并转义所有特殊字符?

[英]How can I pass in arguments to a command line Java program and escape all special characters?

我有一个命令行Java程序,并且正在通过bash脚本传递参数。 该行位于我的bash脚本文件中,如下所示:

java -cp "$PROJECT_LOC" Main.main "@$"

bash脚本在我的路径中,因此我可以通过键入以下内容直接调用该程序

<projectName> arg1 arg2 arg3

直接进入我的终端(我在OS X Yosemite上)。

当将“&”号作为参数传递时,它不会被视为普通的“&”号,而是被视为执行某些过程的特殊字符“&”号。 但是,我希望能够简单地将&符号作为参数传递,而不必使程序的用户手动转义字符。

有没有一种方法可以处理我的bash脚本中的&符(或任何其他特殊字符)的传入,这样输入中的任何和所有特殊字符都将被转义,然后作为的(现在已清除)args传入Java程序?

编辑:更清楚地说,我希望能够在终端中执行以下操作:

<projectName> arg1 arg&2 arg3

我希望此输入与此等效:

<projectName> 'arg1' arg&2' 'arg3'

但是我正在寻找一种不必强迫用户自己逃脱特殊字符(在幕后进行所有操作)的方法。

您可以在每个参数周围加上单引号(')。 我不确定这是否算作“转义”参数。

您需要在命令行上引用/转引号。 当您输入如下命令时:

<projectName> arg1 arg&2 arg3

Shell将其解析为两个单独的命令<projectName> arg1 arg2 arg3 ,并确定第一个命令应在后台运行。 您的脚本看不到2 arg3 (这是一个单独的命令),甚至看不到& (这是该命令后的分隔符)。 所有这些都在脚本运行之前,甚至在外壳开始弄清楚<projectName>与您的脚本相对应之前<projectName>确定。

您的脚本对此完全零控制

换句话说,将根据标准Shell语法来解析命令行,并且标准Shell语法表示未转义/未引用的&符是命令之间的分隔符。 您的脚本不能使自己成为该语法的例外。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM