Bash

編輯命令行時展開 shell 變數

  • December 14, 2020

如果我在提示符下寫入ls bla.*,然後=在游標仍在bla.*命令行部分時按下,bla.*則會列印匹配的文件列表。如果我按*,該詞將替換該列表。

參考變數而不是shell glob模式是否有類似的可能?

換句話說,我正在尋找可以列印當我在命令行中游標打開$THISVARIABLE時按下時的值和/或在我按下時替換它的東西。some_key``$THISVARIABLE``another_key

重要的細節,我set editing-mode vi在我的~/.inputrc.

如果shell 處於 Emacs 編輯模式,您可以shell-expand-line通過按Meta+ Ctrl+e(在我的系統Meta上是Esc)來呼叫 Readline 功能。bash

插圖:

$ echo $PATH

如果我現在按Meta+ Ctrl+e,shell 會將整行替換為

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

這也將擴展命令替換,因此可能會執行擴展所需的部分命令行。這也意味著未完成的事情$(會產生語法錯誤。

這不會擴展外殼通配模式。

如果您想在 Vi 編輯模式下使用它,那麼您需要將shell-expand-line函式顯式綁定到鍵序列,因為預設情況下它沒有綁定。例如,要將其綁定到Ctrl+e,請使用

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

使用與 Emacs 模式相同的鍵序列顯然會出現問題,因為Esc在 Vi 模式下具有特殊功能。

引用自:https://unix.stackexchange.com/questions/624388