所以我试图设置一个函数来正确解析以下类型的输入(请注意,这个输入是胡言乱语,只是为了说明我的例子)
"./test script";ls -a -o;mkdir "te>st";ls > somefile.txt
其中每个命令由“;”分隔 并且每个参数都由空格 ' ' 分隔,除非它们被包裹在 "" 中,在这种情况下,它们应该被视为文字或整体。IE 我想要的输出是
cmd : "./test 脚本"
cmd : ls args[2] {-a, -o}
cmd:mkdir args[1] {“测试>st”}
cmd : ls args[2] {>, somefile.txt}
我试过通过 ; 拆分它 首先,然后通过''但第一个示例失败(包裹在“”中,所以应该被认为是完整的),我在使用 c 时遇到了一些问题,因为我不太熟悉该语言,有人可以帮忙吗?这就是我到目前为止所拥有的
// Commands split with ;
char *cmdSplitToken = strtok(srcPointer, ";");
// Store commands seperately so we can deal with them one by one
while(cmdSplitToken != NULL) {
cmds[cmdCount++] = cmdSplitToken;
cmdSplitToken = strtok(NULL, ";");
}
// Loop over commands and gather arguments
for(int i = 0; i < cmdCount; i++) {
// args split with ' '
char *argSplitToken = strtok(cmds[i], " ");
int argCount = 0;
while(argSplitToken != NULL) {
printf("arg %s\n", argSplitToken);
argCount++;
argSplitToken = strtok(NULL, " ");
}
}