Bash'daki önceki komuttan belirli bir argümanı nasıl alabilirim?


31

Bash'ta, !*önceki komuttan tüm argümanları almak için kullanabilirsiniz . Örnek olarak, yaptıysanız cp /some/path /some/other/pathve yaptıysanız mv !*, ikinci komut genişleyecekti mv /some/path /some/other/path.

Bunların yerine bir komuttan belirli bir argümana erişmek için kullanılabilecek böyle bir şey var mı?

Yanıtlar:


38

Gelen !*, !bir tarih genişletme öneki ve *bir kelime designator demek olduğunu bütün argümanlar. Genel sözdizimini bang-line-colon-column ( !line :column) olarak ezberleyebilirsiniz . Pek çok olası kısayol vardır: varsayılan satır önceki satırdır, varsayılan sütun belirteci “tümü” dür ve sütun belirteci sayısal değilse (ancak !3satır 3 anlamına gelirse) kolonu bırakabilirsiniz . Sen kullanabilirsiniz !:0komut adının başvurmak için, !:1, !:2, vb, ardışık argümanlar başvurmak için !:$son kelime için !:*tüm argümanlar için, ve daha fazlası.

Ayrıca bkz Michael Mrozek'in tarafından bu yazı en Unix Stack Borsası .


1
Kendim denedim ve bu işe yaramadı. Michale Mrozek'in tarafından göreve baktıktan sonra, bu kullanım için diyor !:1, !:2. Sürümü iki nokta ile kullandıktan sonra çalıştı.
— Wuffers

@ MRMan: Hata! Doğru, eğer bir sayı ile iki nokta üst üste bırakırsanız, sayı satır numarası olarak yorumlanır. Bunun için üzgünüm.
— Gilles 'SO- kötülük yapmayı bırak'

Sorun değil. Öyleyse, yapmanın !1:1ilk satırın ilk argümanına işaret edeceğini varsayıyorum ?
— Wuffers

4

Şahsen, echo "Hello World!"etkileşimli mermileri denediğinizde bile rahatsız edici olacak olan bu “ünlem işareti ile genişleme” özelliğini gerçekten beğenmedim (etkileşimli olmayan modda çalıştırılacağını varsayan kaynak kod komutları çalışmaz).

Böylece, set +o histexpandaşağıdaki yöntemi kullanarak argümanları ayarlayıp hatırlamaya başlıyorum:

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

Not: Esc-numara, bir meta anahtarım olmadığı içindir.


Komutlarda neredeyse hiç ünlem işareti kullanmam. Bu yüzden Exclamation point metodu benim için mükemmel çalışıyor.
— Wuffers

O zaman tadını çıkar. Kabuğunuzun sayısız özelliklerinden birçoğu sadece birkaç kullanıcı için tasarlanmıştır.
— Benoit

Aslında ünlemlerden kaçmak zorunda değilsin. Do echo 'Hello, orld!'. Çift tırnak yerine tek tırnaklara dikkat edin.
— Wuffers
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.