2014-12-20 29 views
1

當我想使用*作爲函數main()的參數時,shell會將其展開爲當前目錄中的所有文件。如何避免這種情況?C - 使用「*」作爲函數main的參數

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"); 
} 

在命令行上,它會輸出:

[email protected] ~/D/P/C> ./expr 2 3 4 + * 
13 
./expr 
2 
3 
4 
+ 
Command.c 
Readlines.c 
catlas.h 
expr 
expr.c 
find 
find.c 
+2

你試過逃脫它嗎? – Rizier123

回答

4

*在外殼上下文中使用的特別通配符。該外殼將始終將*擴展爲,實際上傳遞給您的程序。要將*作爲命令行參數字符的輸入,可以將*放在引號中,如"*"或使用轉義字符\*(如其他答案中的建議)停止擴展。

否則,*的擴展正在被shell執行之前,它是通過到您的程序。

+0

它的工作原理,謝謝! – Joe

+0

@ATLAS不客氣。順便說一句,你可以考慮[接受](http://meta.stackexchange.com/q/5234)幫助你的答案。 –

2

您必須在輸入時跳過*\*。所以我們必須提及不是通配符的shell。這是性格。