【发布时间】:2019-12-12 22:29:59
【问题描述】:
我正在制作一个自定义 C shell,目前使用空格分割命令:
(我目前正在做的简化示例)
char *buf[20];
char *tempVar;
tempvar = strtok(buf, " ");
例如:
sleep 5 将被拆分为 sleep 和 5。
但是,我也想拆分&(以创建后台进程)。所以sleep 5& 将被分成 3 个:sleep、5 和 &。
任何帮助将不胜感激。
【问题讨论】:
-
这听起来不像你可以用
strtok()完成的事情,而且你需要编写自己的标记器来检查输入流并返回接下来的任何内容,并酌情尊重空格,而且即使之前没有空格,也会抓住其他字符,例如&。 -
如果您要支持引号和转义等内容,无论如何您都需要一个更强大的词法分析器,最好直接从您自己的开始,而不是尝试使用
strtok。 -
strtok 与分隔符一起使用,因此它不适合此用例。自己解析行并做一些创造性的 sscanf() 摆弄可能是最简单的。
-
使用
size_t len = strlen(tempVar); if (len && tempVar[len-1] == '&')添加一个检查然后你知道tempVar中的最后一个字符是'&'所以用0覆盖它以在该点终止并添加一个额外的参数包含"&".