在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上尝试了这个例子,我不知道是否重要答案 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命令 - 如cygwin wiki中所述,
Cygwin提供基于Windows的应用程序,数据和其他系统资源与应用程序,软件工具和类Unix环境数据的本机集成。因此,可以从Cygwin环境启动Windows应用程序,以及在Windows操作环境中使用Cygwin工具和应用程序。