私はしばしばbashプロンプトにコマンドを書き、現在の行の前の引数を取得してコマンドの他の場所に配置しようとします。
簡単な例は、ファイル名を変更したい場合です。私はできます。
- キー
mv
入力 - 移動したいファイル名を入力し、
~/myTestFileWithLongFilename.txt
- 今度は再入力せずに、最初のパラメータに指定したファイルの拡張子を変更したいと思います。
最初の引数を自動補完するために、どういうわけか履歴やbashの補完を使用できますか?
$ mv ~/myTestFileWithLongFilename.txt ~/myTestFileWithLongFilename.md
もちろん、不完全なコマンドを実行して履歴に入れてから参照できることを知っています!$
。
答え1
可能ですが少し面倒です。 bashは!#
入力された行全体を意味します。:
この場合、後に引用する特定の単語を指定できます!#:1
。shell-expand-line
組み込みのreadlineキーバインディングControl--Altを使用して拡張できますe。
答え2
このコマンドに必要な入力量を減らすには、中mv
かっこ拡張を使用できます。
mv ~/myTestFileWithLongFilename.{txt,md}
中括弧の拡張は~/myTestFileWithLongFilename.txt
次のように拡張されます~/myTestFileWithLongFilename.md
(正しい順序が重要です{txt,md}
)。
bash
中括弧拡張は、コマンドラインに入力するかスクリプトに入力するかにかかわらず機能します。
中括弧拡張は、文字列と実際の中括弧で文字列がprefix{word1,word2,word3}suffix
繰り返されるたびに3つの別々の単語を生成します。または、などの中括弧拡張内で範囲を使用することもできます。prefix
suffix
wordN
prefixword1suffix
prefixword2suffix
prefixword3suffix
{1..4}
{p..u}
答え3
対話的にalt+を押し1、次に alt+ .(ピリオド)を入力します。
繰り返しalt+は.コマンド履歴に戻り、最後のコマンド前のコマンドからトークン#1を抽出します。 (コマンド自体はトークン#0、 alt+です0)
<token-number>
alt-修飾子がない場合、alt-は次のことを.
行います。最後前のコマンドの引数です。たとえばmkdir foo
、/ cd
Alt+。戻ってディレクトリを作成し、その中にCDを挿入します。
通常、最後のトークン(変更されたキーストローク)を除くすべての場合は、上向き矢印、Ctrl-w、またはAlt + Dを押してからCtrl-yを押して単語を削除し、再インポートして混乱しないようにします。マイレコードを混ぜ合わせ、下矢印とCtrl-yをもう一度押して、編集中のコマンドラインから目的の位置にドラッグします。ところで、これはbashにあります。
答え4
を使用set -o vi
してEscキーを押しますbyw$p
(スペースなどを追加する必要があるかもB
しれませんW
)。その後、修正してください。