所以我正在用 C 编写一个基本的 UNIX minishell。一切都进行得很顺利,但是我最近重新设计了它从控制台获取的原始字符串中解析参数的方式。这是它解析方式的示例:
$> 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!
只有一个(因为空字符串是一个参数)。
我希望这不会太令人困惑。如果你们需要任何澄清,请询问;我很乐意发布代码。