当我想输入命令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
选项卡完成可以忽略变量大小写。
答案 0 :(得分:2)
存在不区分大小写的文件系统,在这样的系统上,文件名完成不区分大小写是有意义的。在一个理想的世界中,bash可以判断文件路径的一个组件是否不区分大小写,但实际上没有提供此信息的标准接口,因此bash回退到允许您显式配置不区分大小写的文件名完成:(引自{ {3}},重点补充)
completion-ignore-case
如果设置为on
,则readline以不区分大小写的方式执行文件名匹配和完成。默认值为“off”。
同样,您可以将glob扩展和/或案例模式配置为不区分大小写。
但是你不能使bash变量不区分大小写。 $bash
和$BASH
是不同的变量。与bash函数名称类似,bash内置名称和bash关键字。 Bash可以完成所有这些选项卡的完成,但无论文件名区分大小写的配置如何,选项卡完成都区分大小写。
虽然这似乎是一个合理的理由,但事实证明bash tab-completion始终区分大小写除了以外的文件名(包括目录和bash命令,映射到文件名),可以配置不区分大小写。即使是通常不区分大小写的东西,如信号名称和主机名也只能以区分大小写的方式完成。