如果我ls bla.*
在提示符处写入,然后=在光标仍在命令行部分时按下,则会打印bla.*
匹配的文件列表。bla.*
如果我按*,该单词将替换该列表。
引用变量而不是 shell glob 模式是否可能出现类似的情况?
换句话说,我正在寻找一些东西,$THISVARIABLE
当我在命令行中some_key光标处于打开状态时按下时,可以打印出值,和/或当我按下时替换它。$THISVARIABLE
another_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 模式具有特殊功能。