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.