【问题标题】:$ followed by a char in command line argument in C$ 后跟 C 中命令行参数中的字符
【发布时间】:2012-08-29 15:54:50
【问题描述】:

我刚刚用 C 语言编写了一个使用命令行参数的程序,我试图打印第一个参数。当我使用以下命令执行程序时

./a.out $23

并尝试使用以下代码打印第一个参数

printf("%s", argv[1]);

输出只是

3

我在这里遗漏了什么,如果存在某些特殊字符,命令行参数的处理方式会有所不同。有人可以解释这种行为吗?

【问题讨论】:

    标签: c command-line


    【解决方案1】:

    您需要转义 $ 字符。

    试试这个:

    ./a.out \$23
    

    【讨论】:

      【解决方案2】:

      大概$2 被视为shell 变量。尝试转义美元符号:

      ./a.out \$23
      

      【讨论】:

        【解决方案3】:

        你必须像这样“抑制”你的论点:

        ./a.out \$23
        

        某些字符由 shell 解释。这些字符包括:

        • \ 抑制(转义)它后面的字符(对空格、制表符或您的情况很有用)
        • * 代表任何单个字符或字符串
        • $ 代表一个变量(在你的情况下,shell 理解变量 $23,而不是字符串“$23”)
        • ||| 允许在您的命令中进行解析或通过管道传输您的命令
        • &&& 允许组合命令或允许使用作业控制
        • " 允许shell分隔字符串
        • ' 允许 shell 不解释带有特殊字符的字符串
        • ; 分隔命令
        • ` 解释其中两个包含的命令并返回命令的输出

        【讨论】:

          【解决方案4】:

          shell 将$23 视为位置参数$2 后跟文字字符 3。要传递字符串“$23”,请执行以下任一操作

          ./a.out \$23
          

          ./a.out '$23'
          

          要传递 shell 的第 23 个位置参数(不太可能,但可能),您可以这样写

          ./a.out ${23}
          

          【讨论】:

            猜你喜欢
            • 2021-08-19
            • 2020-12-16
            • 1970-01-01
            • 2023-03-13
            • 1970-01-01
            • 1970-01-01
            • 2011-12-05
            • 2015-12-26
            • 1970-01-01
            相关资源
            最近更新 更多