在linux中检测分号作为命令行参数

时间:2018-06-06 06:19:14

标签: c++ command-line command-line-arguments

我正在尝试运行一个C ++应用程序,我将一些命令行参数传递给它,如下所示:

./startServer -ip 10.78.242.4 tcpip{ldap=no;port=2435}

应用程序崩溃了,因为它无法获得正确的端口。通过网络搜索,我发现";"被视为命令结束符(Semicolon on command line in linux),因此之后的所有内容都会被忽略。我也明白把它放在引号内会很好用。但是,我不想强​​制将参数放在用户引号中的限制。所以,我想知道有没有办法处理&#34 ;;" argv数组的字符?

2 个答案:

答案 0 :(得分:1)

分号分隔两个命令,因此命令行等同于

./startServer -ip 10.78.242.4 tcpip{ldap=no
port=2435}

您的应用程序永远不会知道关于半冒号或第二个命令的任何信息,这些将完全由shell处理。您需要使用反斜杠转义冒号或将其括在引号中。可能导致类似问题的其他字符包括:$,\-#`'":*?()&|

复杂字符串更容易从文件或stdin传递。

答案 1 :(得分:1)

需要不仅引用;,而且在一般情况下还引用{}

./startServer -ip 10.78.242.4 'tcpip{ldap=no;port=2435}'

如果您的用户需要输入复杂的最后一个参数,那么也可以引用它们。