命令行补全

补全是一个十分有用的功能。所有现代的 shells (包括 bash)有该功能。它的作用是让用户尽量少操劳。实例是解释补全的最好方式。

举例

如果您想查看您个人目录中的一个叫做 file_with_very_long_name_impossible_to_type 的文件。并且假定您在同一个目录中还有一个叫做 file_text 的文件。您现在在您的个人目录中,这样,您只要输入:

$ less fi<TAB>

(即键入 less fi 然后按下 TAB 键)。shell 就会为您扩展命令行:

$ less file_

并给出可能的选项列表(这个默认配置可以自定义)。然后输入:

less file_w<TAB>

shell 就会将命令行扩展成您所需要的:

less file_with_very_long_name_impossible_to_type

然后,您要做的就是按下回车键确认,并阅读文件。

其他补全方式

虽然最为常用,TAB 键并非激活补全的唯一方式。一般来说,对于命令行中的第一个单词,要补全的是命令名(比如 nsl<TAB> 会给出 nslookup);对于其他单词会扩展成文件名,除非该单词以 ~@$ 等“特殊”字符为前缀,而这时 shell 会分别尝试用用户名、机器名或环境变量名来进行扩展[8]。还有一个特殊字符用于补全文件名(/)和一个用于从历史记录中回用一个命令的特殊字符(!)。

另外两个激活补全的方式是依次按下 Esc-<x>Ctrl+x <x>。其中 <x> 是上述特殊字符。Esc-<x> 将尝试给出一个唯一的补全。如果不行的话,将给出最大可能子字符串选择列表。的一声表示要么选择不唯一,要么没有对应的选项。Ctrl+x <x> 序列将不补全而显示所有可能的选项列表。按下 TAB 键相当于依次按下 Esc-<x>Ctrl+x <x>,其中的特殊字符依赖于上下文环境。

因此,要查看全部已定义的环境变量,一种方式是在空白行上依次按下 Ctrl+x $。另一个例子:如果您想要查看 nslookup 命令的 man 页面,您只要键入 man nsl 以及 Esc-!,然后 shell 将自动将该命令补全为 man nslookup



[8] 请记住,UNIX® 是区分大小写的。环境变量 HOMEhome 是不同的。