ls bla.*
プロンプトに書き込んでカーソルがまだ=コマンドラインセクションにある間にキーを押すと、一致するファイルのリストがbla.*
印刷されます。bla.*
を押すと、*その単語がリストを置き換えます。
シェルグローブパターンの代わりに変数を引用すると、同様の状況が可能ですか?
つまり、$THISVARIABLE
コマンドラインでカーソルがsome_key開いている間に値を押すと、値が印刷されるか、値が変わることを探しています。$THISVARIABLE
another_key
私のset editing-mode vi
。~/.inputrc
答え1
シェルがEmacs編集モードの場合は、+(マイシステムでは)をshell-expand-line
押してReadline機能を呼び出すことができます。MetaCtrl+eMetaEscbash
イラスト:
$ echo $PATH
Meta今すぐ+を押すと、Ctrl+eシェルは行全体を次に置き換えます。
$ 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'
EscViモードには特別な機能があるため、Emacsモードと同じキーシーケンスを使用する際には明らかに問題があります。