代码之家  ›  专栏  ›  技术社区  ›  Krishna Chaurasia Rajiv Pandey

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

  •  0
  • Krishna Chaurasia Rajiv Pandey  · 技术社区  · 6 年前

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

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

    应用程序正在崩溃,因为它无法获得正确的端口。在网上搜索,我发现“被视为命令结束字符( Semicolon on command line in linux )所以之后的一切都被忽视了。我也明白把它放在引号里会很好。但是,我不想对用户施加将参数放在引号中的限制。所以,我想知道是否有一种方法可以处理“;”使用argv数组的字符?

    2 回复  |  直到 6 年前
        1
  •  1
  •   Alan Birtles    6 年前

    分号分隔了两个命令,因此您的命令行等效于

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

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

    从文件或通过stdin传递复杂字符串要容易得多。

        2
  •  1
  •   Kusalananda    6 年前

    需要 不仅引用 ; 但在一般情况下 { } :

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

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