2016-05-17 4 views
4

あなたが対話型シェルにいると、あなたのような何かを入力した場合:コマンドラインで前のコマンドのn番目の引数を取得するにはどうすればよいですか?

echo !^ #=> echo this 

それとも、最後の引数拡張することができます:

echo this is it 

その後、後であなたが最初の引数を拡張することができますが

echo !$ #=> echo it 

しかし、今、私は思ったんだけど:

どのように交流希望n番目の引数を受け入れますか?私はa related bash questionを通じて見えたが、!nはちょうど私のコマンド履歴を(代わりに私の議論の歴史の)行くので、それは、スクリプト内のみ作品のように思える - 例理にかなっている

echo !1 #=> echo ls 

ため、

理由
history | grep -E '^\s+1 ' #=> 1 ls 

しかし、私が欲しいこの方法echo !(some correct index) #=> echo is

答えて

9

です:

~ $ echo this is it 
~ $ echo !!:2 
echo is 
is 

!!:n
!!:n-$は、n番目の引数が最後にあるn番目の引数である

注:

第二引数:!!はOPはEDIT(moved)を1として最後のコマンド


に展開最後のコマンドに2番目の:

~ $ echo foo bar baz # This one is the target 
foo bar baz 
~ $ echo catz ratz batz 
catz ratz batz 
~ $ echo !-2:2 
echo bar 
bar 

!-nは「n」の麻痺したコマンドに展開現在のコマンドの前にコマンドを追加します。

注:!-1!!は同じです。

関連する問題