Как получить эквивалент расширенного завершения tcsh в bash?

В tcsh manpage эффекты set complete = enhance определяются следующим образом:

[…] завершение 1) игнорирует регистр и 2) считает периоды, дефисы и символы подчеркивания ('.', '-' и '_') разделителями слов, а дефисы и подчеркивания эквивалентными.

Что касается 1), я знаю, что readline может быть сконфигурирован так, чтобы игнорировать регистр через set completion-ignore-case on . Поэтому мой вопрос касается только 2).

Например, если у меня есть каталог, содержащий несколько файлов с похожими базовыми именами, но с разными расширениями:

 $ ls file0.dat file1.dat file2.dat files.sh 

то я хочу, чтобы оболочка имела возможность завершить расширение файла:

 $ cat .sh<TAB> $ cat files.sh 

Есть ли способ достичь или, по крайней мере, подражать этому поведению в bash ?

РЕДАКТИРОВАТЬ

Следуя первым ответам, здесь приведены другие примеры, которые более точно показывают, как работает функция tcsh :

 $ ls abc.foo abc.bar cab.foo cab.bar $ cat af<TAB> $ cat abc.foo 

или:

 $ cat .b<TAB> abc.bar cab.bar $ cat .bar 

Фактически, tcsh завершает как базовое имя, так и расширение. Предложенное здесь поведение – это перечисление возможностей, если несколько, как обычно, с завершением TAB, чтобы не вставлять их все.

  • Автозаполнение ZSH
  • как мне получить zsh для * просто * перечислить материал в моем текущем каталоге во время завершения табуляции?
  • Как я могу заполнить -N числовой параметр?
  • Завершите выполнение табуляции, предлагая «messagebus»
  • Добавить конечную косую черту в завершении bash символьных ссылок каталога
  • Терминал не является источником .zshrc с пользовательскими цветами для команд ls и cd
  • Избегайте конечной косой черты в bash при заполнении имени каталога (например, zsh)
  • zsh: правила завершения для ssh
  • One Solution collect form web for “Как получить эквивалент расширенного завершения tcsh в bash?”

    Это не совсем то, что вам нужно, но близко. Комбинация клавиш Ctrl + x , g ( Cx g в emacsspeak) будет содержать список расширений глобуса. Итак, в вашем примере:

     $ cat *.b*<Ctrl><x><g> abc.bar cab.bar 

    Итак, в отличие от того, что вы описываете для tcsh , для этого нужен действительный glob. Другими словами, это эквивалентно

     $ echo *.b* 

    Обратите внимание, что ярлык нажимает Ctrl и x вместе, затем отпускает их и нажимает g .

    Это описано в man bash :

      glob-list-expansions (Cx g) The list of expansions that would have been generated by glob-expand-word is displayed, and the line is redrawn. If a numeric argument is supplied, an asterisk is appended before pathname expansion. 
    Linux и Unix - лучшая ОС в мире.