mic*_*ckp 6 bash tab-completion bash-completion
在尝试配置可编程完成时,我遇到了一个我不理解的行为.
鉴于这三种完成方案,这是我理解它们的方式:
$<TAB><TAB>
Run Code Online (Sandbox Code Playgroud)
行的开头 - >使用complete -E
- >如果它不存在,使用complete -D
- >如果它不存在,使用默认的Bash完成 - >行上没有单词 - >使用命令完成.
$com<TAB><TAB>
Run Code Online (Sandbox Code Playgroud)
尝试完成第一个单词 - >使用命令完成.
$command argu<TAB><TAB>
Run Code Online (Sandbox Code Playgroud)
该行至少有一个单词 - >试图完成一个参数 - >使用complete
给定的命令 - >如果它不存在,使用complete -D
- >如果它不存在,使用默认的Bash完成 - >行上至少有一个单词,所以不要使用命令完成 - >不能启动$
,~
或者@
执行文件名完成.
我的问题是为什么在这种情况下执行文件名完成而不是命令完成,即使该行上还没有单词:
$<SPACE><TAB><TAB>
Run Code Online (Sandbox Code Playgroud)
由于下面的命令完成按预期执行,因此更加令人困惑:
$<SPACE>com<TAB><TAB>
Run Code Online (Sandbox Code Playgroud)
我很可能误解了手册,我会非常感谢任何解释.
注意:
$
表示提示,而不是文字美元符号.
当 Bash shell 中的一行以空格开头时,这会告诉 shell 该命令不应进入命令历史记录。这可以通过HISTCONTROL
在您的 或任何您想要的文件中设置 env 变量来配置.bashrc
,.profile
并且应该是默认行为(另请参阅如何防止命令显示在 bash 历史记录中?)。
因此,当该行有前导空白时,命令执行是相同的,只是该命令不会进入历史记录。因此,代码完成的行为也相同。