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

4
我是一名有用的助手,可以为您提供文本翻译。
我在使用shell中将asterisk作为Java命令行参数时遇到了问题。以下是这个问题的简单描述:
首先,有一个简单的Java程序,它打印命令行参数。
public class CmdArgsTest 
{
    public static void main(String[] args) 
    {
        for(String arg : args)
        {
        System.out.println(arg);    
        }
    }
}

当我在shell命令中输入:Java CmdArgsTest "s*"时,它不会打印"s*",而是当前目录中的所有文件名。我已经在论坛上搜索了类似的问题并尝试使用单引号's*'或反斜杠's/*',但都没有起作用。希望有人能帮助我。感谢任何帮助。顺便说一句,感谢Elliott Frisch的提醒,我在Cygwin上尝试了这个例子,我不知道这是否重要。

尝试使用 "S\*"。应该可以工作。 - Darshan Mehta
不是所有的文件,只有以s开头的文件。 - tripleee
$ java CmdArgsTest 's\', 它也没有起作用。 正则表达式:"s\" - Jimmy
是的,不是所有文件,只有以s或S开头的文件。 - Jimmy
1个回答

1

您似乎正在与shell 通配符 打交道,而您的命令必须是 java CmdArgsTest s* 才能获得该行为

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

所以,

java CmdArgsTest "s*"

或者

java CmdArgsTest s\*

或者

java CmdArgsTest 's*'

编辑 (Cygwin)

使用Windows命令行转义语法,

"java CmdArgsTest s*"

您需要这样在cygwin中执行命令,因为如 维基百科所述,cygwin能够运行Windows命令。

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


不幸的是,我尝试过了,但它没有起作用。如果当前目录中有s1.txt和s2.txt,则显示为:[s1.txt,S2.txt]。 - Jimmy
@jimmy Unix文件通常区分大小写。这是哪个平台? - Elliott Frisch
@Jimmy 是的!好的。这样解释了其中一部分(例如混合大小写)。这可能是一个cygwin的bug。 - Elliott Frisch
@Jimmy 已编辑。尝试使用 Windows 语法。 - Elliott Frisch
哦,是的,我相信如此!很抱歉我没有考虑到Cygwin可能会产生的影响。稍后我会在我的Linux环境中尝试一下。非常感谢您的帮助,我真的很感激。 - Jimmy
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接