当前位置: 首页 > 知识库问答 >
问题:

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

满自明
2023-03-14

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

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

bash脚本在我的路径中,因此我可以通过键入

<projectName> arg1 arg2 arg3

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

当&符号作为参数传入时,它不是作为普通的&符号字符读取,而是作为执行某些进程的特殊字符&符号读取。但是,我希望能够简单地将&符号作为参数传入,而不必让程序用户手动转义字符。

有没有办法在我的bash脚本中处理符号(或任何其他特殊字符)的传入,以便对输入中的任何和所有特殊字符进行转义,然后作为Java程序的(现在已清理)参数传入?

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

<projectName> arg1 arg&2 arg3

我希望此输入与此等效:

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

但我正在寻找一种方法,不必强迫用户自己逃离特殊角色(在后台做所有事情)。

共有2个答案

艾璞瑜
2023-03-14

您需要在命令行上引用/转义与。当您输入以下命令时:

<projectName> arg1 arg&2 arg3

shell将其解析为两个独立的命令,

您的脚本对这一切完全没有控制权。

换句话说:命令行将根据标准shell语法进行解析,标准shell语法表示未转义/无引号的符号and是命令之间的分隔符。您的脚本不能成为此语法的例外。

姚宪
2023-03-14

可以在每个参数周围加单引号(')。不过,我不确定这是否算作“逃避”争论。

 类似资料:
  • 问题内容: 因此,我在Linux中,并且希望有一个程序在从命令行执行时接受参数。 例如, 因此,程序会将数字42存储为int类型,并根据代码得到的-b或-s参数执行代码的某些部分。 问题答案: 您可以使用getopt。

  • 问题内容: 我有一个用Node.js编写的Web服务器,我想使用一个特定的文件夹启动。我不确定如何在JavaScript中访问参数。我正在像这样运行节点: 这是我的服务器代码。Node.js帮助说这是可能的: 如何在JavaScript中访问这些参数?不知何故我无法在网上找到此信息。 问题答案: 参数存储在 以下是有关处理命令行参数的节点文档: 是一个包含命令行参数的数组。第一个元素是’node’

  • 使用JDK1.8和OSX。对于,其中之一是unicode(中文、日文等)字符。不知道怎么通过他们?我在上面找了几个解决办法,但都没用。 null 你好,林

  • 问题内容: 我有一个用Node.js编写的Web服务器,我想使用一个特定的文件夹启动。我不确定如何在JavaScript中访问参数。我正在像这样运行节点: 这是我的服务器代码。Node.js帮助说这是可能的: 如何在JavaScript中访问这些参数?不知何故,我无法在网上找到此信息。 问题答案: 标准方法(无库) 参数存储在 以下是有关处理命令行参数的节点文档: 是一个包含命令行参数的数组。第一

  • 我试图将一个参数从命令行传递到java类。我关注了这篇文章:http://gradle.1045684.n5.nabble.com/gradle-application-plugin-question-td5539555.html,但是代码对我来说不起作用(也许它不适合JavaExec?)。以下是我所尝试的: 上面硬编码的args值的输出是: 任何关于如何将命令行参数传递给gradle的指针都很感

  • 我在Eclipse中工作。 我的Maven程序有一个pom。带有exec插件的xml文件: 我试图传递一个参数,但仍然出现错误: 未知的生命周期阶段“..\src\test\resources\file.txt”。您必须以以下格式指定有效的生命周期阶段或目标:或:[:]。可用的生命周期阶段包括:验证、初始化、生成源、流程源、生成资源、流程资源、编译、流程类、生成测试源、流程测试源、生成测试资源、流