当我在 Bash 中删除一个“单词”时,它会在某些字符处停止,例如_和/。例如,如果我输入
/foo/bar
Run Code Online (Sandbox Code Playgroud)
并激活backward-kill-word(通常映射到Alt-Backspace和/或Ctrl- w),剩余的文本是
/foo/
Run Code Online (Sandbox Code Playgroud)
. 这确实不对应$COMP_WORDBREAKS或readline的rl_completer_word_break_characters。我如何检测(最好是在正在运行的系统中,而不是代码中的默认值,因为它们可能会被覆盖)哪些字符用于确定断字?
bash 文档指出:
Run Code Online (Sandbox Code Playgroud)backward-kill-word (M-Rubout)杀死点后面的词。词边界与后向词使用的边界相同。
和
Run Code Online (Sandbox Code Playgroud)backward-word (M-b)移回当前或上一个单词的开头。单词由字母数字字符(字母和数字)组成。
backward-wordBash 4.2 中的处理是在捆绑的 libreadline 代码 ( text.c:rl_backward_word) 中完成的。单词 break 是基于 的rl_alphabetic,它本身依赖于isalnum函数。这取决于语言环境,但不能直接在 bash 中进行配置。
请注意,Bash 4.0 引入了另一种带有shell-forward-word和shell-backward-word动作(和kill 等效项)的“词”类型。这些仅在 shell 元字符 ( ()<>;&|") 和空格(可能依赖isblank于语言环境通过)上中断,在主 bash 代码 ( bashline.c) 中处理。