我正在使用 C 语言中的 shell,它在空格字符('')上使用 strtok 从用户输入创建参数列表。例如,strtok 'ls foo bar' 创建一个包含三个元素的 char*:ls、foo、bar。
我的问题是,如何检测逃逸空间?
例如,strtok 'ls foo\ bar' 创建一个包含三个元素的 char**:ls、foo\、bar。但它应该创建一个包含两个元素的 char*:ls、foo bar
我怎样才能做到这一点?
您将无法使用strtok
,因为strtok
不理解转义字符。您可以尝试解决这个问题,但最终如果您想支持引用参数之类的东西,您将需要一种更灵活的方法。
考虑改为编写解析器。只需遍历输入中的每个字符并决定如何处理该字符:空格前进到下一个参数,反斜杠逐字复制下一个字符,引号开始引用的上下文等。这是一种更灵活的处理输入的方式,并且您将不受strtok
.
只需将 strtok 的第二个参数从更改" "
为" \"
(“分隔符”)。这些字符将确定用户输入在何处拆分为标记,因此它们都不会进入标记列表。有关 strtok 的更多信息,请参见此处。
编辑:对不起,我误解了你。上述建议只会删除\
s. 我同意手动解析是要走的路。一次获取一个字符是最简单的,fgetc()
例如使用 .