我正在尝试将许多参数传递给我的 Java 应用程序,但我想自己使用智能解析器来解析它们,该解析器不仅仅依赖空格来分隔参数。一个例子:
/更新源=foo func=(bar, foo ,foo,bar)
通过将所有内容转换为令牌然后解析它们,这一切都很好。但是,当我添加时出现问题:
path="./foo/bar/foo bar.txt"
(注意 foo 和 bar 之间的双倍空格)。
当我使用双引号时,参数作为单个字符串传递,保留双空格。尽管像这样删除引号:
路径=./foo/bar/foo bar.txt
这使我的解析器失败。但是当我尝试使用其他字符作为引号时,例如',解析器工作正常,但是shell将字符串作为两个单独的字符串传递,在双空格处分隔,因此我丢失了那里有两个空格的信息.
我可以做些什么来使用双引号传递参数以保留文字字符串表示,同时保留字符串被引用的信息,而无需用户键入像“'string'”这样的奇怪结构?我正在使用Java,也许有一种方法可以让外壳不解析整行参数?或者只是没有删除引号?
顺便说一句,我从微软命令行运行它,还没有尝试过 unix shell,它甚至可能在我在互联网上读到的单引号上失败