我刚用c语言编写了一个使用命令行参数的程序,我试图打印第一个参数。当我用以下命令执行程序时
./a.out $23
并尝试使用以下代码打印第一个参数
printf("%s", argv[1]);
输出只是
3
我在这里遗漏了一些东西,如果存在一些特殊字符,那么命令行参数将被区别对待。有人可以解释这种行为。
答案 0 :(得分:5)
您需要转义$
字符。
试试这个:
./a.out \$23
答案 1 :(得分:4)
据推测,$2
被视为shell变量。尝试逃避美元符号:
./a.out \$23
答案 2 :(得分:3)
你必须像这样“抑制”你的论点:
./a.out \$23
shell会解释一些字符。这些字符包括以下内容:
\
禁止(逃避)其后面的角色(对于空格,制表符或在你的情况下有用)*
代表任何单个字符或字符串$
代表一个变量(在你的情况下,shell理解变量$ 23,而不是字符串“$ 23”)||
或|
允许在您的命令中解析或管理您的命令&&
或&
允许组合命令或允许使用作业控制"
允许shell分隔字符串'
这允许shell不解释带有特殊字符的字符串;
分隔命令`
其中解释其中两个所包含的命令并返回命令的输出答案 3 :(得分:1)
shell将$23
视为位置参数$2
,后跟文字字符3.要传递字符串“$ 23”,请执行
./a.out \$23
或
./a.out '$23'
要传递shell的第23个位置参数(不太可能,但可能),你会写
./a.out ${23}