gpt4 book ai didi

c++ - Eclipse 和命令行参数中的引号?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:38:22 24 4
gpt4 key购买 nike

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

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

包括引号。它们可以是单引号或双引号,但必须存在。在 Eclipse 中,如果我设置命令行参数(调试配置/参数)并输入上面的命令行选项(减去/path/to/exe),Eclipse 会使用引号。由于我在 Linux 上运行它,方括号给 shell 带来了麻烦,它甚至从未进入我的代码。

如果我这样设置命令行参数:

“这是引用”

argv[1] 看起来像这样:

这是引用

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

\"这是引用\"

我得到:

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

如果我尝试将方括号放入其中,即使我试图避开它们,它也会给 shell 带来麻烦:

\"\[this is quoted\]\"

如何让 Eclipse 完全按照我输入的方式获取命令行参数?

谢谢

最佳答案

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

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

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

因此,参数按以下方式工作:

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

  • 引号之后和下一个匹配引号(或 EOF)之前的任何字符都按字面意思处理,并失去特殊含义(包括单引号和双引号)。

  • 空格(除非转义或在引号内)用作参数定界符。

以前的行为几乎没有定义,因为 `date` 会被 bash 替代,但行为并不总是与 bash 相同。这可能会破坏一些用户的 hacky 配置,但现在重写是微不足道的,而在必须通过反复试验和各种转义引号组合找到正确的字符串之前,“我需要一个、两个或四个反斜杠吗?”。

关于c++ - Eclipse 和命令行参数中的引号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13594581/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com