Завершение является очень удобной функциональной возможностью и все современные shells (включая bash) имеют ее. Ее задача облегчить пользователю работу насколько возможно. Чтобы продемонстрировать завершение, приведем пример.
Предположим, в вашем домашнем каталоге содержится файл file_with_very_long_name_impossible_to_type и вы хотели бы его просмотреть. Предположим, в этом же каталоге у вас есть другой файл с названием file_text. Вы находитесь в домашнем каталоге, тогда напечатайте следующее:
$ less fi<TAB> |
(то есть напечатайте less fi, а затем нажмите клавишу TAB). shell развернет командную строку для вас:
$ less file_ |
а также выдаст список возможных вариантов выбора (из конфигурации shell по умолчанию, что можно изменить). Затем напишите следующее ключевое выражение:
less file_w<TAB> |
и shell развернет командную строку до желаемого результата:
less file_with_very_long_name_impossible_to_type |
Все, что вам нужно теперь будет сделать - это нажать клавишу Enter для подтверждения и прочитать файл.
Клавиша TAB не является единственным способом активировать завершение строки, хотя это наиболее распространено. По общему правилу, слово, которое будет завершено, будет именем команды в первом слове командной строки (nsl<TAB> будет давать nslookup), и имя файла для всех остальных, если слову не предшествует “magic” (магический) символ типа ~, @ или $, когда shell будет пытаться заполнить имя пользователя, название машины или переменной окружения соответственно[8]. Существует также магический символ для заполнения имени команды (!) или имени файла (/).
Другие две возможности активизации подстановки это последовательности Esc-<x> и Ctrl+x <x>, где <x> это один из уже упомянутых магических символов. Esc-<x> будет пытаться подобрать уникальную подстановку. Если у него не получится, он подставит слово с наиболее возможной подстрокой из списка выбора. beep обозначает то, что выбор либо не уникальный, либо не существует соответствующего выбора. Последовательность Ctrl+x <x> отображает список возможных подстановок без попытки подстановки. Нажатие клавиши это то же самое, что последовательное нажатие Esc-<x> и Ctrl+x <x>, где магический символ зависит от контекста.
Таким образом, единственный путь увидеть все определенные переменные окружения это набрать последовательность Ctrl+x $ в пустой строке. Другой пример: если вы хотите посмотреть man page (страницу руководства) для команды nslookup, вы можете просто набрать man nsl, затем Esc-!, и shell автоматически заполнит команду до man nslookup.
[8] Помните: UNIX различает большие и маленькие символы. Переменные окружения HOME и home это не одно и то же.