为什么Bash可以';当制表符完成变量名时,是否忽略大小写?

为什么Bash可以';当制表符完成变量名时,是否忽略大小写?,bash,readline,tab-completion,Bash,Readline,Tab Completion,当我想输入命令echo$bash\ucode>,然后按Tab键时,自动完成无法发生。 但当我输入命令echo$BASH\ucode>,然后按下Tab,完成列表将如下输出: $BASH_ALIASES $BASH_COMMAND $BASH_SOURCE $BASH_ARGC $BASH_COMPLETION_COMPAT_DIR $BASH_SUBSHELL $BASH_ARGV

当我想输入命令
echo$bash\ucode>,然后按
Tab
键时,自动完成无法发生。
但当我输入命令
echo$BASH\ucode>,然后按下
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
ignorecase选项,
设置完成忽略大小写,文件名不区分大小写。

因此,我希望
变量名
选项卡完成可以忽略变量大小写

存在不区分大小写的文件系统,在这样的系统上,文件名完成不区分大小写是有意义的。在理想情况下,bash可以判断文件路径的组件是否不区分大小写,但实际上没有提供此信息的标准接口,因此bash转而允许您显式配置不区分大小写的文件名完成:(引自,emphasis添加)

完成忽略案例

如果在
上设置为
,readline将以不区分大小写的方式执行文件名匹配和完成。默认值为“关闭”

类似地,您可以将glob扩展和/或大小写模式配置为不区分大小写

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

虽然这似乎是一个合理的理由,但事实证明bash选项卡完成总是区分大小写的,除了可以配置为不区分大小写的文件名(包括映射到文件名的目录和bash命令)之外。即使是通常不区分大小写的事情,如信号名和主机名,也只能区分大小写完成