Eclipse&在命令行参数中引用?

时间:2012-11-27 22:47:00

标签: c++ eclipse

我有一些C ++代码,希望它的命令行看起来像这样:

/ path / to / exe -p:parameterName =“[/ path / to / a / file,/ path / to / another / file]”

包括引号。它们可以是单引号或双引号,但它们必须在那里。在Eclipse中,如果我设置了命令行参数(Debug配置/参数)并输入上面的命令行选项(减去/ path / to / exe),则Eclipse会使用引号。因为我在Linux上运行它,所以方括号给了shell悲伤,它甚至从未进入我的代码。

如果我这样设置命令行args:

“这是引用”

argv [1]看起来像这样:

引用

即。没有引号。如果我这样设置命令行:

\“这是引用的”

我明白了:

argv[1]: "this
argv[2]: is
argv[3]: quoted"

如果我试图将方括号放入其中,那么即使我试图逃避它们,也要回到悲痛之中:

\"\[this is quoted\]\"

如何告诉Eclipse完全按照我输入的命令行参数?

由于

3 个答案:

答案 0 :(得分:2)

我找到了一个解决方案 - 至少现在连续几次都有效。在Eclipse的Arguments选项卡的“Program arguments”字段中,输入命令行参数,如下所示:

-p:parameterName="'[foo,bar]'"

这变成了:

-p:parameterName='[foo,bar]'

在gdb的“set args”命令中。我最后用方括号表达式的单引号结束,但这对我的应用程序来说很好。我不知道为什么这样做(我希望我这样做)或为什么其他逃避文本的方法都失败了。

双&的顺序单引号很重要。如果你试着把单引号放在外面,它会变成

set args -p:parameterName=\"[foo,bar]\"

失败了。如果需要双引号,我不确定我会怎么做。

答案 1 :(得分:2)

我解决了这个问题,所以现在有明确的规则提供参数。你可以在这里详细阅读:

https://bugs.eclipse.org/bugs/show_bug.cgi?id=474648

主要原则是Run和Debug必须表现相同,参数主要是程序接收的而不是bash,并且如何提供参数的规则必须简单直观。完全避免使用规则是不可能的,因为当使用单个字符串来传达每个参数结束的位置时,某些特殊标记是不可避免的。

因此,参数的工作方式如下:

  • 反斜杠后面的任何字符都会按字面意思处理并失去特殊含义。

  • 在引用之后和下一个匹配引号(或EOF)之前的任何字符都会被字面处理并失去特殊含义(单一和双重)。

  • 空格(除非转义或引号内)用作参数分隔符。

之前的行为几乎未定义,因为像`date`这样的东西会受到bash的限制,但行为并不总是与bash相同。这可能会破坏一些用户hacky configs但现在重写是微不足道的,而在通过试验和错误以及各种逃避引用组合找到正确的字符串之前,“我需要一个,两个或四个反斜杠吗?”。

答案 2 :(得分:0)

你有没有试过

"\"\[this is quoted\]\""

BTW:这不是一个日食问题,只是反映了shell的行为。