質問: Ubuntuの標準のbashシェルで、たとえば長いファイル名のファイルのバックアップを 手でコマンド入力するときに、何か省略して簡単に打ち込める方法は無いでしょうか? 例 ``` cp very-long-filename.txt very-long-filename.txt.old ``` を ``` cp (very-log-filename.txt) \1.old ``` のように前方参照させるようなやりかたです
回答: 何故か `bash` の履歴展開機能を挙げている人がいないので書いておきます。履歴展開 (history expansion; 対話シェルで既定で有効になっています) の指定を使えば、まさに質問文の様な事ができます。即ち、 例 ``` cp very-long-filename.txt very-long-filename.txt.old ``` を ``` cp very-log-filename.txt !#:1.old ``` と書く事ができます。`!#:1` の部分が履歴展開の指定です。意味は「`!` (= 履歴展開) `#` (= 現在のコマンドライン) `:` (= の ) `1` (= 1つ目の単語)」です。上記を実行すると、コマンド内容が一旦 `cp very-long-filename.txt very-long-filename.txt.old` に展開されてから実行されます。 履歴展開の指定方法の詳細については `man bash` を御覧になるのが良いと思います。履歴展開は指定ミスをしやすいので、慣れない内は直接実行せずに一旦コマンド `M-^` (history-expand-line) を用いて展開してから実行するのがおすすめです。履歴展開の指定 `!~` をコマンドラインに入力してから `M-^` を押すと、コマンドラインの内容が履歴展開後の内容に置き換わります。