将shell作为Java命令行参数转义为星号

时间:2014-06-25 17:23:46

标签: java bash shell

在shell中使用星号作为Java命令行参数时遇到了问题。 我可以简化这个问题的描述如下:

首先,有一个简单的java程序可以打印命令行参数。

public class CmdArgsTest 
{
    public static void main(String[] args) 
    {
        for(String arg : args)
        {
        System.out.println(arg);    
        }
    }
}

当我输入:shell命令中的Java CmdArgsTest“s *”;

它不会打印“s *”,而是打印当前目录中的所有文件名。

我在论坛上搜索过类似的问题,并试图使用单引号*'或反斜杠的/ *',但都没有用。

希望有人可以帮助我。我感谢任何帮助。

BTW:感谢Elliott Frisch的提醒,我在Cygwin上尝试了这个例子,我不知道是否重要

1 个答案:

答案 0 :(得分:1)

您似乎正在与shell globbing作战,而您的命令必须是java CmdArgsTest s*才能获得该行为

$ echo \*
*
$ echo "*"
*
$ echo '*'
*

所以,

java CmdArgsTest "s*"

java CmdArgsTest s\*

java CmdArgsTest 's*'

修改(Cygwin)

使用windows shell转义语法,

"java CmdArgsTest s*"

您需要在cygwin中以这种方式执行命令,因为cygwin能够运行Windows命令 - 如 wiki中所述,

  

Cygwin提供基于Windows的应用程序,数据和其他系统资源与应用程序,软件工具和类Unix环境数据的本机集成。因此,可以从Cygwin环境启动Windows应用程序,以及在Windows操作环境中使用Cygwin工具和应用程序。