前のbashコマンドの引数を呼び出すにはどうすればよいですか?


回答:


562

$_または!$を使用して、前のコマンドの最後の引数を呼び出すことができます。

また、Alt + .以前のコマンドのいずれかの最後の引数をリコールするために使用することができます。


121
また、あなたが任意の引数をしたい場合は、あなたが使用することができ!!:1!!:2など(!!:0前のコマンドそのものである。)を参照してくださいgnu.org/software/bash/manual/bashref.html#History-Interaction
janmoesen

41
と同様に !$!^最初の引数に使用します。
ウィル

13
ahh ... * nix ...あなたは美しいものです...毎日私はあなたをもっと
愛しています

前のコマンドの最後から2番目の引数をどのように参照できますか?たとえば、を指定した場合、次のコマンドでecho tiger rabbitどのように参照できtigerますか?
Chan Kim

3
Alt + .viモードでは機能しません。ここで混乱した他の人のために、参考までに。
Brian McCutchon

160

前のコマンドに次のような2つの引数がある場合

ls a.txt b.txt

最初のものが欲しかったので、

!:1

与える

a.txt

または、両方が必要な場合は、次のように入力できます

!:1-2

与える

a.txt b.txt

これを任意の数の引数に拡張できます。例:

!:10-12

@RNA、私はタイプミスが含まれていないことを確認するためにもう一度試したところ、もう少し詳細を提供できますか(たとえば、ubuntuコマンドライン、windowsのcygwin?エラーメッセージ?前のライン?)
Robert Gowland

私はGNU bash、バージョン3.2.51(1)-release(x86_64-apple-darwin13)を使用していますCopyright(C)2007 Free Software Foundation、Inc.エラーメッセージは-bash: :1-2: bad word specifier
RNA

2
前の行に2つの引数がなかった場合も同じです。例えば。1 ls a.txt行目2行目ll !:1-2
Robert Gowland 2014

あなたが正しい。それは私がした愚かな間違いです。ありがとう!
RNA

また、すべての引数を取得するために、!:^-$数値と組み合わせて使用​​したり、もちろん同様のコードを使用したりできます。
816-8055 2017年

88

!!:nここnで、必要な引数の0ベースの位置です。

例えば:

echo 'one' 'two'
# "one two"

echo !!:2
# "two"

!プレフィックスは、前のコマンドにアクセスするために使用されます。

その他の便利なコマンド:

  • !$ -前のコマンドの最後の引数
  • !^ -前のコマンドからの最初の引数(プログラム/組み込み/スクリプトの後)
  • !! -前のコマンド(「バンバン」と発音されることが多い)
  • !n- nからのコマンド番号history
  • !pattern -最新のコマンド一致 pattern
  • !!:s/find/replace-最後のコマンド、代替findreplace

コマンド履歴の詳細


7
の代わりに!!:s/find/replace、あなたもできます^find^replace
Big McLargeHuge 2017

また、!* -前のコマンドからのすべての引数(プログラム/組み込み/スクリプトの後)。例: ls *.tmp *.cache rm !*
アフォイド

68

コマンドラインでesc- .またはalt+を押すことができます.

前のコマンドの最後の引数を循環します。


とのキーも常に機能することがわかりました。
バケット

@Bucketキーは以前のコマンドを通過しますが、Antonioが提供するソリューションでは、以前の引数(以前の各コマンドの最後の引数のみ)を通過できます
Everyonesdesign

30

特定のコマンドの履歴で与えられた番号を知っている場合、次の用語を使用してそのコマンドのほとんどの引数を取ることができます。

以下を使用して、履歴の3番目のコマンドから2番目の引数を取得します。

!3:2

以下を使用して、履歴の最後の5番目のコマンドから3番目の引数を取得します。

!-5:3

マイナス記号を使用して、履歴の最後のコマンドからトラバースするように要求します。


19

!*は、以前のすべての引数を使用して新しいコマンドを実行します。

ls /tmp
cd !*
#you are now in /tmp

これは私にとってOSXでは機能しませんでした- $_代わりに使用する必要がありました。
マイクW

16

はい、!$前のコマンドの最後の引数を呼び出すために使用できます。


特にコマンドに複数の引数が含まれている場合は、「最後」というキーワードに注意してください。
バケット
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.