在 CentOS 和 Ubuntu 上测试过,如果你在一个有大量文件的目录中
$ ls
day1.tar.gz day2.tar.gz day3.tar.gz day4.tar.gz day5.tar.gz day6.tar.gz day7.tar.gz day8.tar.gz day9.tar.gz day10.tar.gz
如果你点击Alt+Shift+{
它,awk 将完成每个文件名
<Alt+Shift+{>
完成至:
day{1{0.tar.gz,.tar.gz},2.tar.gz,3.tar.gz,4.tar.gz,5.tar.gz,6.tar.gz,7.tar.gz,8.tar.gz,9.tar.gz}
和
day1<Alt+Shift+{>
完成至:
day1{0.tar.gz,.tar.gz}
问题:这是什么?这叫什么?它在哪里有用?我该如何配置它?我可以对以子字符串结尾而不是以子字符串开头的文件执行此操作吗?
答案1
在 Bash 中,它执行 readline 功能complete-into-braces
。
括号扩展是缩写多个文件引用的有效方法。
例如:
ls -l /path/to/dir/*.{c,h}
将列出所有以“.c”或“.h”结尾的文件。
从man bash
:
complete-into-braces (M-{)
执行文件名补全,并插入括号内的可能补全列表,以便 shell 可以使用该列表(请参阅上面的括号扩展)。
和
括号扩展
括号扩展是一种可以生成任意字符串的机制。此机制类似于路径名扩展,但生成的文件名不需要存在。要进行括号扩展的模式采用可选前言的形式,后跟一系列逗号分隔的字符串或一对括号之间的序列表达式,后跟可选的后记。前言是括号内的每个字符串的前缀,后记则附加到每个结果字符串,从左到右扩展。括号扩展可以嵌套。每个扩展字符串的结果未排序;保留从左到右的顺序。例如,a{d,c,b}e 扩展为“ade ace abe”。
按照定义,完成完成所以它可以处理开始用字符串。