什么是 readline 单词分隔符?

l0b*_*0b0 9 bash readline

当我在 Bash 中删除一个“单词”时,它会在某些字符处停止,例如_/。例如,如果我输入

/foo/bar
Run Code Online (Sandbox Code Playgroud)

并激活backward-kill-word(通常映射到Alt-Backspace和/或Ctrl- w),剩余的文本是

/foo/
Run Code Online (Sandbox Code Playgroud)

. 这确实对应$COMP_WORDBREAKSreadlinerl_completer_word_break_characters。我如何检测(最好是在正在运行的系统中,而不是代码中的默认值,因为它们可能会被覆盖)哪些字符用于确定断字?

Mat*_*Mat 9

bash 文档指出:

backward-kill-word (M-Rubout)
Run Code Online (Sandbox Code Playgroud)

杀死点后面的词。词边界与后向词使用的边界相同。

backward-word (M-b)
Run Code Online (Sandbox Code Playgroud)

移回当前或上一个单词的开头。单词由字母数字字符(字母和数字)组成。

backward-wordBash 4.2 中的处理是在捆绑的 libreadline 代码 ( text.c:rl_backward_word) 中完成的。单词 break 是基于 的rl_alphabetic,它本身依赖于isalnum函数。这取决于语言环境,但不能直接在 bash 中进行配置。

请注意,Bash 4.0 引入了另一种带有shell-forward-wordshell-backward-word动作(和kill 等效项)的“词”类型。这些仅在 shell 元字符 ( ()<>;&|") 和空格(可能依赖isblank于语言环境通过)上中断,在主 bash 代码 ( bashline.c) 中处理。

  • @Stephane Chazelas:我的意思是它无法通过 bash 选项进行配置,重新表述一下。 (2认同)