1
我正在研究一個基本的unix shell,我很自豪地說它工作的很棒,我在整個開發過程中學到了很多東西。我缺少一個功能,我似乎無法圍繞如何使它工作,也許我的大腦被燒壞了。編寫我自己的基本shell:處理雙引號的參數
如果我收到以下輸入:
回聲的「Hello World」
我需要解析的輸入,使得雙引號的論點被認爲是一個參數的命令,而不是兩個單獨的參數。
我想要完成這個的方式是,我需要一種方法來檢測參數中是否有2個引號。如果我們找到它們,我們將需要一個單獨的解析函數來處理它們。
我已經包含了我的解析函數,因爲我認爲這是魔法需要發生的地方。任何意見是極大的讚賞。
//parse
char ** parse(char *input){
char *token;
char **args;
args = malloc (MAX_SIZE*sizeof(char));
int i = 1;
token = strtok(input, " \n\t()<>|&;");
args[0] = token; //this is the command
token = strtok(NULL, " \n\t()<>|&;");
while (token != NULL){
args[i] = token; // these are the arguments
i++;
token = strtok(NULL, " \n\t()<>|&;");
}
args[i] = NULL; //end the array with NULL (required for execvp)
return args;
}
我會提供'strtok'在這裏完全不足;例如它不正確處理'foo「bar
我們的外殼可以正確處理重定向和管道。我的意思不是:) –
我的意思是,你上面的'strtok'代碼將根據**引用的字符串**內的標記** –