为什么 Bash 不能忽略 tab 补全变量名的大小写?

zhe*_*oli 5 bash readline tab-completion

当我想输入命令时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
Run Code Online (Sandbox Code Playgroud)

我的.inputrc文件包含readlineignorecase选项,set completion-ignore-case on并且文件名完成不区分大小写是可以的。
所以,我希望variable name制表符补全可以忽略变量大小写。

ric*_*ici 2

存在不区分大小写的文件系统,在此类系统上,文件名完成不区分大小写是有意义的。在理想的情况下,bash 可以判断文件路径的某个组件是否不区分大小写,但实际上没有提供此信息的标准接口,因此 bash 回退到让您显式配置不区分大小写的文件名完成:(引自bash手册,强调)

\n\n
\n

completion-ignore-case
\n 如果设置为on,则 readline以不区分大小写的方式执行文件名匹配和完成。默认值为 \xe2\x80\x98off\xe2\x80\x99。

\n
\n\n

同样,您可以将全局扩展和/或大小写模式配置为不区分大小写。

\n\n

但你不能使 bash 变量不区分大小写。$bash$BASH是不同的变量。与 bash 函数名称、bash 内置名称和 bash 关键字类似。Bash 可以对所有这些进行制表符补全,但无论文件名区分大小写的配置如何,制表符补全都是区分大小写的。

\n\n

虽然这似乎是一个合理的理由,但事实证明,除了文件名(包括映射到文件名的目录和 bash 命令)之外,bash制表符补全始终区分大小写,文件名可以配置为不区分大小写。即使通常不区分大小写的内容(例如信号名称和主机名称)也只能区分大小写。

\n