首页 > 解决方案 > 如何将引用的参数作为单个参数处理?

问题描述

我正在制作一个从标准输入获取输入的外壳。

我正在尝试解析包含匹配单引号或双引号的未嵌套引用参数。(可以与未引用的参数混合)

我希望每个带引号的字符串都被视为一个参数,这样我就可以放入一个参数数组中。然后我想尝试将所有参数保存在一个数组中。

这类似于 C 可执行文件在 bash shell 中接受参数的方式。

前任:

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

有什么建议么?

标签: cshell

解决方案


推荐阅读