В основному, це останній аргумент попередньої команди.
!$є "кінцем" попередньої команди. Розглянемо наступний приклад: почнемо з пошуку слова у файлі:
grep -i joe /some/long/directory/structure/user-lists/list-15
якщо Джо є в цьому списку користувачів, ми хочемо видалити його з нього. Ми можемо запустити vi з тим довгим деревом каталогів як аргумент, або просто так, на vi !$який баш розгортається:
vi /some/long/directory/structure/user-lists/list-15
( джерело ; зручний довідник, до речі)
Нічого не варто відрізняти цей !$маркер і спеціальну змінну оболонки $_. Дійсно, обидва розширюються до останнього аргументу попередньої команди. Однак !$розгортається під час розширення історії , тоді $_як розгортається під час розширення параметрів . Одним з важливих наслідків цього є те, що при використанні !$, то розширена команда зберігається в історії.
Наприклад, розглянемо натискання клавіш
(Змінені лише символи - це $!і $_в середині.)
У першому, коли ви натискаєте Up, командний рядок зчитується echo Foo Jar, тому останній рядок, записаний у stdout, є Foo Jar.
В останньому, коли ви натискаєте Up, командний рядок читає echo $_ bar, але тепер $_має інше значення, ніж це було раніше - справді, $_це зараз Jar, тому останній рядок, записаний у stdout, є Jar Jar.
Іншим наслідком є те, що _можна використовувати в інших розширеннях параметрів, наприклад, послідовності команд
printf '%s ' isomorphism
printf '%s\n' ${_%morphism}sceles
відбитки isomorphism isosceles. Але немає аналогічного ${!$%morphism}розширення.
Для отримання додаткової інформації про фази розширення в Bash, дивіться EXPANSIONрозділ man 1 bash(це називається розширення Shell в інтернет-видання). HISTORY EXPANSIONРозділ окремо.
echoщось, якщо ви не впевнені, що це зробить.