编辑命令行时展开 shell 变量

编辑命令行时展开 shell 变量

如果我ls bla.*在提示符处写入,然后=在光标仍在命令行部分时按下,则会打印bla.*匹配的文件列表。bla.*如果我按*,该单词将替换该列表。

引用变量而不是 shell glob 模式是否可能出现类似的情况?

换句话说,我正在寻找一些东西,$THISVARIABLE当我在命令行中some_key光标处于打开状态时按下时,可以打印出值,和/或当我按下时替换它。$THISVARIABLEanother_key

重要的细节,我set editing-mode vi在我的~/.inputrc.

答案1

如果shell 处于 Emacs 编辑模式,您可以shell-expand-line通过按Meta+ Ctrl+e(在我的系统上Meta是)来调用 Readline 功能。Escbash

插图:

$ echo $PATH

如果我现在按Meta+ Ctrl+e,shell 会将整行替换为

$ echo /usr/bin:/bin:/usr/sbin:/sbin:/usr/X11R6/bin:/usr/local/bin:/usr/local/sbin

这也将扩展命令替换,因此可能会执行扩展所需的部分命令行。这也意味着未完成的事情$(会产生语法错误。

这不会扩展 shell 通配模式。

如果你想在 Vi 编辑模式下使用它,那么您需要将shell-expand-line函数显式绑定到键序列,因为默认情况下它未绑定。例如,要将其绑定到Ctrl+e,请使用

bind '"\C-e": shell-expand-line'

使用与 Emacs 模式相同的按键序列显然会出现问题,因为EscVi 模式具有特殊功能。

相关内容