Как обрабатывать цитируемые аргументы как один аргумент? - PullRequest
1 голос
/ 17 апреля 2019

Я работаю над созданием оболочки, которая принимает входные данные от стандартного ввода.

Я пытаюсь проанализировать не вложенные , аргументы в кавычках, содержащие совпадения, одинарные или двойные кавычки.(можно смешивать с аргументами без кавычек)

Я хочу, чтобы каждая строка в кавычках рассматривалась как один аргумент, чтобы я мог поместить его в массив аргументов.Затем я хочу попытаться сохранить все аргументы в массиве.

Это похоже на то, как исполняемые файлы C принимают аргументы в оболочке bash.

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

Есть предложения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...