Набрёл сегодня на мануал по установке ack, а там такое:
curl https://beyondgrep.com/ack-2.28-single-file > ~/bin/ack && chmod 0755 !#:3
grep
. Он написан на Perl и ориентирован на работу с кодом.В строке, в конце есть непонятности: !#:3
Опять какая-то магия, а магию мы с тобой любим.
Давай разберемся.
В данном случае !#:3
— это конструкция, связанная с историей команд в оболочке Bash/Zsh.
!
= Используется для доступа к истории команд.
Например, !!
повторит последнюю команду, а !123
выполнит команду с номером 123 в истории.#
— Ссылается на текущую команду, которая в данный момент пишется.
Вместо доступа к уже выполненной команде из истории, мы ссылаемся на текст текущей строки.
:3
= Указывает, что нужно взять третий аргумент в текущей строке.
Соответственно:
:1
— первый аргумент:2
— второй аргумент:3
— третий аргумент
Как это работает?
Сначала выполняется команда curl, которая скачает файл ack-2.28-single-file и сохранит его в ~/bin/ack.
После этого, команда chmod изменяет права доступа для файла.
А !#:3
подставляет третий аргумент текущей команды, то есть ~/bin/ack.
И по итогу команда превращается в chmod 0755 ~/bin/ack
curl http://beyondgrep.com/ack-2.28-single-file > ~/bin/ack && chmod 0755 ~/bin/ack
Вот и вся магия. Упорото? Аще!
- удобно для автоматизации и избежания дублирования ввода
- снижает вероятность ошибок, если накосячил в путях
Короче эта хреновина делает команду более динамичной и минимизирует рукоблудие.
Штука прикольная, как говорится — век живи, век учись.