Temel olarak, önceki komutun son argümanı.
!$
önceki komutun "sonudur". Şu örneği inceleyin: Dosyadaki bir kelimeyi arayarak başlarız:
grep -i joe /some/long/directory/structure/user-lists/list-15
joe bu kullanıcı listesinde ise, onu listeden çıkarmak istiyoruz. Argüman olarak bu uzun dizin ağacıyla vi'yi ateşleyebiliriz, ya da vi !$
hangi bash'ın genişlediği gibi:
vi /some/long/directory/structure/user-lists/list-15
( kaynak ; bu arada kullanışlı bir rehber)
Bu !$
belirteç ile özel kabuk değişkeni arasındaki farkın bir değeri yoktur $_
. Aslında, her ikisi de önceki komutun son argümanına genişler. Ancak, geçmiş!$
genişletme sırasında genişletilirken , parametre$_
genişletme sırasında genişletilir . Bunun önemli sonuçlarından biri !$
, kullandığınızda genişletilmiş komutun geçmişinize kaydedilmiş olmasıdır.
Örneğin, tuş vuruşlarını düşünün.
(Değiştirilen tek karakterler $!
ve $_
ortasındadır.)
Birincisinde, tuşuna bastığınızda Up, komut satırı okur echo Foo Jar
, bu nedenle stdout'a yazılan son satırdır Foo Jar
.
İkincisinde, tuşuna bastığınızda Up, komut satırı okur echo $_ bar
, ancak şimdi $_
daha önce olduğundan farklı bir değere sahiptir - aslında, $_
şimdi Jar
, yani stdout'a yazılan son satır Jar Jar
.
Diğer bir sonuç da, _
örneğin komut dizisi gibi diğer parametre genişlemelerinde kullanılabilecek olmasıdır.
printf '%s ' isomorphism
printf '%s\n' ${_%morphism}sceles
yazdırır isomorphism isosceles
. Ancak benzer bir " ${!$%morphism}
" genişleme yok.
Bash'deki genişlemenin evreleri hakkında daha fazla bilgi için, şu EXPANSION
bölüme bakın man 1 bash
(buna çevrimiçi sürümde Kabuk Genişletmeleri adı verilir ). HISTORY EXPANSION
Bölüm ayrıdır.
echo
yapacağından emin değilseniz bir şeyi denemek genellikle güvenlidir .