bashの前のコマンドから特定の引数を取得するにはどうすればよいですか?


31

bashでは!*、前のコマンドからすべての引数を取得するために使用できます。例として、実行してcp /some/path /some/other/pathから実行した場合mv !*、2番目のコマンドはに展開されmv /some/path /some/other/pathます。

すべてではなく、コマンドから特定の引数にアクセスするために使用できるこのようなものはありますか?

回答:


38

!*!履歴展開プレフィックスであり*、すべての引数を意味する単語指定子です。一般的な構文はbang-line-colon-column(!line :column)として記憶できます。多くのショートカットがあります。デフォルトの行は前の行、デフォルトの列指定子は「すべて」です。列指定子が非数値の場合はコロンを省略できます(ただし、!3行3を意味します)。あなたは使用することができ!:0、コマンド名を参照するために!:1!:2など、連続した引数を参照するために!:$、最後の言葉のために!:*すべての引数のために、そしてより多くの。

参照してくださいマイケルMrozekすることで、この記事ではUnixのスタック交換を


1
私はそれを自分で試しましたが、これはうまくいきませんでした。Michale Mrozekでポストを見た後、それが使用することを言います!:1!:2。コロンを含むバージョンを使用した後、機能しました。
ワッファー

@MrMan:おっと、コロンで数字を省略した場合、その数字は行番号として解釈されます。ごめんなさい
ジル「SO-悪であるのをやめる」

問題ない。だから、私はそれ!1:1が最初の行の最初の引数を指すと仮定しますか?
ワッファー

4

個人的には、この「感嘆符付きの拡張」機能が本当に嫌いです。これはecho "Hello World!"、インタラクティブシェルで試してみても邪魔になります(非インタラクティブモードで実行されると想定するスクリプトのソースはまったく機能しません)。

そこで、set +o histexpand次の方法で引数の設定と呼び出しを開始します。

Esc, 1, Esc, Ctrl-Y => Insert first argument of previous command.

Escトリックは、メタキーがないためです。


コマンドで感嘆符を使用することはほとんどありません。したがって、感嘆符の方法は私にとって完璧に機能します。
ワッファーズ

それを楽しんでください。シェルの多数の機能の多くは、ごく少数のユーザー向けに設計されています。
ブノワ

実際、感嘆符をエスケープする必要はありません。やりますecho 'Hello, orld!'。二重引用符ではなく一重引用符に注意してください。
ワッファー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.