だから私はCで基本的なUNIXミニシェルをプログラミングしています。すべてが順調に進んでいますが、最近、コンソールから取得した元の文字列から引数を解析する方法をやり直しました。解析方法の例を次に示します。
$> echo HELLO "" WORLD!
HELLO "" WORLD!
引数の配列は次のようになります:[echo0、HELLO0、 "" 0、WORLD!0]
私はそれをそのように渡します:
execvp(args[0], args);
ただし、echoは引用符を省略することになっているため、ご覧のとおり、引用符が出力されます。私の場合、echoは組み込みコマンドではないため、印刷方法をカスタマイズすることはできません。なぜこれが起こっているのか誰かが知っていますか?二重引用符を省略したいのですが、他のすべての種類の文字を含めます(もちろんnull以外)。ただし、空の文字列は引数自体としてカウントされるため、次のようになります。
echo HELLO "" WORLD!
出力する必要があります:
HELLO WORLD!
間に2つのスペースがありますが、次のとおりではありません。
HELLO WORLD!
1つだけで(空の文字列は引数であるため)。
これがあまり混乱しないことを願っています。何か説明が必要な場合は、質問してください。コードを投稿させていただきます。