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