我有一些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完全按照我输入的命令行参数?
由于
答案 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的行为。