所以我用C编写了一个基本的UNIX minishell。一切都很顺利,但是我最近重新分析了它从它从控制台获得的原始字符串中分析参数的方式。下面是它的解析方式的一例:C UNIX Shell execvp回声引号
$> echo HELLO "" WORLD!
HELLO "" WORLD!
参数数组看起来像这样:[!echo0,HELLO0 “” 0,WORLD 0]
我通过它像这样:
execvp(args[0], args);
但是,回声应该省略引号,并且正如您所看到的那样,它会将它们打印出来。由于在我的情况下echo不是内置命令,因此我无法自定义它的打印方式。有人知道为什么会发生这种情况吗?我想省略双引号,但包括其他所有类型的字符(当然除了null)。然而空字符串算作参数本身,因此:
echo HELLO "" WORLD!
应该输出:
HELLO WORLD!
与2位之间,而不是:
HELLO WORLD!
只有一个(因为一个空字符串是一个参数)。
我希望这不是太混乱。如果你们需要澄清,请问一下;我很乐意发布代码。
嗯,所以我需要自己剥夺报价之前,将它传递给exec *? – robins35
在空串的情况下怎么样?我如何表达? – robins35
@Scriptonaut使用你的例子:'[echo0,HELLO0,0,WORLD!0]'。 –