我正在为我的周末任务实现一个linux shell,我在实现wilcard匹配作为shell中的一个功能时遇到了一些问题。众所周知,炮弹本身就是一种完整的语言,例如: bash,ksh等我不需要实现控制结构,工作等完整功能。但是如何实现*
?
快速分析会给您以下结果:
echo *
列出当前目录中的所有文件。这是shell的唯一逻辑表现吗?我的意思是,不考虑bash的语言特性,这是shell在内部做的吗?将*
替换为当前目录中与模式匹配的所有文件?
我也听说过Perl兼容正则表达式,但使用第三方库似乎很复杂。
任何建议,链接等?对于bash,我也会尝试查看源代码。
答案 0 :(得分:3)
这称为“globbing”,执行此操作的函数名称相同:glob(3)
答案 1 :(得分:2)
是的,这就是shell的作用。它将替换'*'
中所有文件和文件夹名称的cwd
个字符。事实上,它是非常基本的正则表达式,仅支持'?'
和'*'
,并与cwd
中的文件和文件夹名称匹配。
请注意,在简单或双引号\*
或'*'
之间插入的反斜杠'
和"
不会被替换(反斜杠和引号会在传递给执行的命令之前被删除)。
答案 2 :(得分:1)