当我想使用*
作为函数main()
的参数时,shell会将其扩展为当前目录中的所有文件。怎么避免这个?
int main(int argc, char *argv[])
{
printf("%d\n", argc);
for(int i=0; i<argc-1; i++)
{
printf("%s \n", argv[i]);
}
printf("\n");
}
在命令行中,它将输出:
atlas@localhost ~/D/P/C> ./expr 2 3 4 + *
13
./expr
2
3
4
+
Command.c
Readlines.c
catlas.h
expr
expr.c
find
find.c
答案 0 :(得分:4)
*
是shell上下文中使用的特殊通配符。在实际传递给您的程序之前,shell将始终展开*
。要将*
的输入作为命令行参数字符,您可以将*
括在引号中,例如"*"
或使用转义字符\*
,如其他人所建议的那样答案,以阻止扩张。
否则,在{em>传递到您的程序之前,shell正在执行*
的扩展。
答案 1 :(得分:2)
您必须在提供输入时转义*
。 \*
。所以我们不得不提到不是外卡的外壳。这是个性格。