コマンドライン編集時のシェル変数の拡張

コマンドライン編集時のシェル変数の拡張

ls bla.*プロンプトに書き込んでカーソルがまだ=コマンドラインセクションにある間にキーを押すと、一致するファイルのリストがbla.*印刷されます。bla.*を押すと、*その単語がリストを置き換えます。

シェルグローブパターンの代わりに変数を引用すると、同様の状況が可能ですか?

つまり、$THISVARIABLEコマンドラインでカーソルがsome_key開いている間に値を押すと、値が印刷されるか、値が変わることを探しています。$THISVARIABLEanother_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モードと同じキーシーケンスを使用する際には明らかに問題があります。

関連情報