【发布时间】:2018-11-15 17:24:47
【问题描述】:
我正在尝试运行一个 C++ 应用程序,其中我将一些命令行参数传递给它,如下所示:
./startServer -ip 10.78.242.4 tcpip{ldap=no;port=2435}
应用程序崩溃,因为它无法获取正确的端口。在网上搜索,我发现“;”被视为命令结束字符(Semicolon on command line in linux),因此之后的所有内容都将被忽略。我也明白把它放在引号里会很好。但是,我不想强制将参数放在用户的引号中的这种限制。所以,我想知道有没有一种方法可以处理“;” argv 数组的字符?
【问题讨论】:
-
为什么需要分号作为分隔符?在linux的命令行中使用没有特定含义的东西不是更简单吗?
-
将其屏蔽为 \;也不是一个选择吗?问题似乎是,分号甚至没有传递给您的程序,因此您可以在 argv 数组中处理它。如果你屏蔽它,那么它将被传递,你可以处理它。否则壳会“吃掉”它
-
我也可以这样做,但只是想知道我们是否可以检测到“;”在上面的命令中。
-
您不能为一个应用程序执行此操作。也许你可以用
stty改变它,但是一行可以包含任意数量的命令来启动不同的进程(它们都得到不同的参数)。 -
“把它放在引号内就可以了。但是,我不想强加这个限制” 为什么不呢,这是一个相当标准和被接受的复杂的事情论据?
标签: c++ command-line command-line-arguments