2014-03-30 65 views
0

我是一名Windows程序員,現在我正在學習在Linux環境下編程,我使用LinuxMint15。linux環境命令行參數

我遇到了一個「奇怪」的問題,命令行參數不是我輸入的。 程序是超級簡單:

#include <stdio.h> 
int main(int argc, char* argv[]) 
{ 
    printf("cmd line="); 
    for(int i=0;i<argc;i++){ 
     printf("%s ", argv[i]); 
    } 
    printf("\n"); 
    return 0; 
} 

然後編譯並運行它,它的作品,因爲我想:

[email protected] ~ $ gcc -o cl test_cl.cpp 
[email protected] ~ $ ./cl 1 2 
cmd line=./cl 1 2 

但是,當我在最後輸入一個*,它的文件夾中列出的所有文件名.....:

[email protected] ~ $ ./cl 1 2 * 
cmd line=./cl 1 2 Public Template Video Picture Docs Desktop cl test_cl.cpp test.txt untitled 

發生了什麼事?

回答

2

大多數Linux shell專門處理字符?*。特別是,它們用於匹配文件名稱的匹配模式。在這種情況下,shell將*擴展爲當前目錄中的所有文件,然後將該列表作爲命令行參數發送到您的程序。如果你想要一個文字*,你需要用\*轉義它或用'*'引用它。

+0

感謝您的及時答覆,是的,我注意到\\ *的作品,但我不知道是否有某個地方可以改變shell的默認行爲? – roy

+2

不,你不想改變shell的默認行爲。你需要你的shell像其他人(和POSIX標準)一樣行事! –