В основному, це останній аргумент попередньої команди.
!$
є "кінцем" попередньої команди. Розглянемо наступний приклад: почнемо з пошуку слова у файлі:
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
щось, якщо ви не впевнені, що це зробить.