2

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

./a.out $23

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

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

输出只是

3

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

4

4 回答 4

5

您需要转义$角色。

试试这个:

./a.out \$23
于 2012-08-29T15:55:46.477 回答
4

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

./a.out \$23
于 2012-08-29T15:56:22.280 回答
3

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

./a.out \$23

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

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

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

./a.out \$23

或者

./a.out '$23'

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

./a.out ${23}
于 2012-08-29T16:15:51.963 回答