我正在尝试运行一个C ++应用程序,我将一些命令行参数传递给它,如下所示:
./startServer -ip 10.78.242.4 tcpip{ldap=no;port=2435}
应用程序崩溃了,因为它无法获得正确的端口。通过网络搜索,我发现";"被视为命令结束符(Semicolon on command line in linux),因此之后的所有内容都会被忽略。我也明白把它放在引号内会很好用。但是,我不想强制将参数放在用户引号中的限制。所以,我想知道有没有办法处理&#34 ;;" argv数组的字符?
答案 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}'
如果您的用户需要输入复杂的最后一个参数,那么也可以引用它们。