そのため、次のタイプの入力を正しく解析する関数をセットアップしようとしています (この入力は、私の例を説明するためだけにぎこちないことに注意してください)
"./test script";ls -a -o;mkdir "te>st";ls > somefile.txt
各コマンドが「;」で区切られている場所 また、各引数は空白 ' ' で区切られています。ただし、"" で囲まれている場合は、リテラルまたは全体として処理する必要があります。IE私がこれから望む出力は
cmd : "./test スクリプト"
cmd : ls args[2] {-a, -o}
cmd : mkdir args[1] { "te>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, " ");
}
}