我一直在自学各种 bash“保留字”的含义。
在执行此操作时,我无意中输入了命令
echo !()
Run Code Online (Sandbox Code Playgroud)
令我惊讶的是,该命令执行并产生与该命令相同的输出
echo *
Run Code Online (Sandbox Code Playgroud)
换句话说,输出是当前目录内容的列表
file1 file2 directory1 directory2
Run Code Online (Sandbox Code Playgroud)
为什么 bash 本质!()上扩展为*?
我无法确定 的含义(),因为它在其他上下文中似乎是无效的表达式。
Sha*_*awn 33
它是从 Korn shell(其子集)复制的bash 的extglob 模式匹配语法。!(pattern),当以extglob某种方式启用(例如通过bash_completion交互式 shell 中的附加组件)时,将扩展为当前工作目录中不匹配的(默认情况下非隐藏)文件的名称pattern。
使用空模式时,这是当前目录中名称不是空字符串的所有文件,但文件名无论如何都不能为空,因此这就是所有(默认情况下非隐藏)文件。
当启用它的选项时,您将得到相同的结果zsh,其中相当于 ksh 的。echo ^extendedglob^pattern!(pattern)
| 归档时间: |
|
| 查看次数: |
3445 次 |
| 最近记录: |