【发布时间】:2012-08-29 15:54:50
【问题描述】:
我刚刚用 C 语言编写了一个使用命令行参数的程序,我试图打印第一个参数。当我使用以下命令执行程序时
./a.out $23
并尝试使用以下代码打印第一个参数
printf("%s", argv[1]);
输出只是
3
我在这里遗漏了什么,如果存在某些特殊字符,命令行参数的处理方式会有所不同。有人可以解释这种行为吗?
【问题讨论】:
标签: c command-line
我刚刚用 C 语言编写了一个使用命令行参数的程序,我试图打印第一个参数。当我使用以下命令执行程序时
./a.out $23
并尝试使用以下代码打印第一个参数
printf("%s", argv[1]);
输出只是
3
我在这里遗漏了什么,如果存在某些特殊字符,命令行参数的处理方式会有所不同。有人可以解释这种行为吗?
【问题讨论】:
标签: c command-line
您需要转义 $ 字符。
试试这个:
./a.out \$23
【讨论】:
大概$2 被视为shell 变量。尝试转义美元符号:
./a.out \$23
【讨论】:
你必须像这样“抑制”你的论点:
./a.out \$23
某些字符由 shell 解释。这些字符包括:
\ 抑制(转义)它后面的字符(对空格、制表符或您的情况很有用)* 代表任何单个字符或字符串$ 代表一个变量(在你的情况下,shell 理解变量 $23,而不是字符串“$23”)|| 或 | 允许在您的命令中进行解析或通过管道传输您的命令&& 或 & 允许组合命令或允许使用作业控制" 允许shell分隔字符串' 允许 shell 不解释带有特殊字符的字符串; 分隔命令` 解释其中两个包含的命令并返回命令的输出【讨论】:
shell 将$23 视为位置参数$2 后跟文字字符 3。要传递字符串“$23”,请执行以下任一操作
./a.out \$23
或
./a.out '$23'
要传递 shell 的第 23 个位置参数(不太可能,但可能),您可以这样写
./a.out ${23}
【讨论】: