我正在制作一个从stdin接受输入的shell。
我正在尝试解析未套用,带引号的引数,其中包含匹配的单引号或双引号。 (可以与不带引号的参数混合)
我希望每个带引号的字符串都被视为一个单独的参数,因此我可以将其放入参数数组中。然后,我想尝试将所有参数保留在数组中。
这类似于C可执行文件在bash shell中获取参数的方式。
EX:
mypersonalshell> first second "Hello World" fourth
results: [first, second, Hello World, fourth]
mypersonalshell> first second 'Hello World' fourth
results: [first, second, Hello World, fourth]
mypersonalshell> first "Hello ' World"
results: [first, Hello ' World]
我假设在空格和引号上使用strtok的组合,但是正确使用该组合失败。
到目前为止我有什么
int main(int argc, char* argv[]){
int cmdNum = 1;
char *input = NULL;
size_t len = 0;
ssize_t nread;
printf("mypersonalshell[%d]> ",cmdNum);
while((nread = getline(&input, &len, stdin)) != -1){
trim(input);
if ( strcmp(input, "") == 0){
continue;
}
char *inputArgs[10];
char *token;
token = strtok(input, " ");
while(token != NULL){
// add to string array and parse here
token = strtok(NULL, s);
}
printf("mypersonalshell[%d]> ",++cmdNum);
}
free(input);
return EXIT_SUCCESS;
}
有什么建议吗?