为什么 Bash 无法忽略制表符完成变量名称时的大小写?
Why Bash can't ignore case when tab completion variable names?
当我想输入命令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
ignorecase 选项 set completion-ignore-case on
,文件名完成不区分大小写是可以的。
所以,我希望 variable name
选项卡补全可以忽略变量大小写。
存在不区分大小写的文件系统,在此类系统上,文件名完成不区分大小写是有意义的。在理想情况下,bash 可以判断文件路径的组成部分是否不区分大小写,但实际上没有提供此信息的标准接口,因此 bash 退回到让您显式配置大小写-不敏感的文件名补全:(引自 bash manual,已强调)
completion-ignore-case
If set to on
, readline performs filename matching and completion in a case-insensitive fashion. The default value is ‘off’.
同样,您可以将 glob 扩展 and/or 大小写模式配置为不区分大小写。
但是您不能使 bash 变量不区分大小写。 $bash
和 $BASH
是不同的变量。与 bash 函数名称、bash 内置名称和 bash 关键字类似。 Bash 可以对所有这些进行制表符补全,但是无论文件名区分大小写的配置如何,制表符补全都是区分大小写的。
虽然这似乎是一个合理的理由,但事实证明 bash 制表符补全始终区分大小写 除了 文件名(包括目录和 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
ignorecase 选项 set completion-ignore-case on
,文件名完成不区分大小写是可以的。
所以,我希望 variable name
选项卡补全可以忽略变量大小写。
存在不区分大小写的文件系统,在此类系统上,文件名完成不区分大小写是有意义的。在理想情况下,bash 可以判断文件路径的组成部分是否不区分大小写,但实际上没有提供此信息的标准接口,因此 bash 退回到让您显式配置大小写-不敏感的文件名补全:(引自 bash manual,已强调)
completion-ignore-case
If set toon
, readline performs filename matching and completion in a case-insensitive fashion. The default value is ‘off’.
同样,您可以将 glob 扩展 and/or 大小写模式配置为不区分大小写。
但是您不能使 bash 变量不区分大小写。 $bash
和 $BASH
是不同的变量。与 bash 函数名称、bash 内置名称和 bash 关键字类似。 Bash 可以对所有这些进行制表符补全,但是无论文件名区分大小写的配置如何,制表符补全都是区分大小写的。
虽然这似乎是一个合理的理由,但事实证明 bash 制表符补全始终区分大小写 除了 文件名(包括目录和 bash 命令,映射到文件名),可以将其配置为不区分大小写。即使是通常不区分大小写的内容,如信号名称和主机名,也只能区分大小写完成。