Почему Bash не может игнорировать случай, когда имена переменных завершения табуляции?

Когда я хочу ввести команду echo $bash_затем нажимаю Tab ключ, автозаполнение не может произойти.
Но когда я ввожу команду echo $BASH_затем нажимаю Tab, список завершения будет выводиться так:

$BASH_ALIASES                $BASH_COMMAND                $BASH_SOURCE
$BASH_ARGC                   $BASH_COMPLETION_COMPAT_DIR  $BASH_SUBSHELL
$BASH_ARGV                   $BASH_LINENO                 $BASH_VERSINFO
$BASH_CMDS                   $BASH_REMATCH                $BASH_VERSION

И мой .inputrc файл содержит readline опция игнорирования, set completion-ignore-case on, и завершение имени файла нечувствительно к регистру в порядке.
Итак, я хочу variable name Завершение табуляции может игнорировать регистр переменной.

1 ответ

Решение

Существуют файловые системы без учета регистра, и в таких системах имеет смысл, чтобы при добавлении имени файла не учитывался регистр. В идеальном случае bash может определить, является ли компонент пути к файлу нечувствительным к регистру, но на практике нет стандартного интерфейса, предоставляющего эту информацию, поэтому bash отступает от возможности явно настроить регистрозависимое завершение имени файла без учета регистра: (цитата из bash ручной, акцент добавлен)

completion-ignore-case
Если установлено onreadline выполняет сопоставление и завершение имени файла без учета регистра. Значением по умолчанию является "off".

Аналогично, вы можете настроить расширение глобуса и / или шаблоны регистров так, чтобы они не учитывали регистр.

Но вы не можете сделать переменные bash нечувствительными к регистру. $bash а также $BASH разные переменные. Аналогично с именами функций bash, встроенными именами bash и ключевыми словами bash. Bash может выполнить завершение табуляции со всеми из них, но независимо от конфигурации чувствительности к регистру имен файлов, завершение табуляции чувствительно к регистру.

Хотя это кажется разумным оправданием, выясняется, что завершение табуляции bash всегда чувствительно к регистру, за исключением имен файлов (включая каталоги и команды bash, которые отображаются на имена файлов), которые можно настроить без учета регистра. Даже вещи, которые обычно нечувствительны к регистру, такие как имена сигналов и имена хостов, могут быть выполнены только с учетом регистра.

Другие вопросы по тегам