我正在尝试创建自定义shell作为练习,并希望实现通配符扩展。像bash这样的shell究竟如何进行扩展?我的意思是涉及所有步骤?
据我所知,shell在当前目录中查找文件名,并将包含'*'的参数替换为应匹配的文件名。它是否正确?除了'*'
之外,shell应该执行哪些其他通配符扩展答案 0 :(得分:5)
POSIX规范描述了符合POSIX标准的shell应该支持的word expansions。您可以使用glob
或wordexp
POSIX函数执行这些扩展(glob
仅支持wordexp
支持的扩展的一小部分。
答案 1 :(得分:0)
Bourne shell [original sh]支持*
,?
和[range]
扩展。 bash还支持**
答案 2 :(得分:0)
从技术上讲,通配符扩展与模式匹配概念密切相关。非常粗略,涉及的步骤包括:
对于各种各样的字符,请查看特定shell实现的文档(例如,bash,zsh等)。大多数这些东西直接映射到正则表达式机制的一个或几个特征。
答案 3 :(得分:0)
您可以在标记给提示的命令时对通配符进行扩展。使用glob(3)库执行通配符扩展。通过在全局函数中设置不同的标志,可以执行各种类型的扩展。 glob(3) documentation
有关不同类型的通配符扩展的参考-Here