!
это функция, которая первоначально появилась в оболочке C , еще в те дни, когда можно было рассчитывать, что на терминалах есть клавиши со стрелками. Это особенно полезно, если вы добавляете текущий номер команды в приглашение ( PS1="\!$ "
), чтобы вы могли быстро просмотреть свой экран, чтобы получить номера для прошлых команд.
Теперь, когда вы можете использовать клавиши со стрелками и тому подобное Ctrl-Rдля поиска в истории команд, я не вижу особой пользы для этой функции.
Один из вариантов, который вы все еще можете найти полезным, - !!
это повторное выполнение предыдущей команды. Сам по себе я не нахожу !!Enterничего быстрее, чем просто ↑ Enter, но это может быть полезно, когда объединено в большую команду.
Пример. Распространенная ошибка пилот-сигнала в sudo
основанных системах - забыть sudo
префикс команды, требующей дополнительных привилегий. Новичок перепечатывает всю команду. Прилежный ученик редактирует команду из истории команд оболочки. Просветленный один из типов sudo !!
.
Bash позволяет отключить !
обработку в оболочке с помощью set +o histexpand
или set +H
. Вы можете отключить его в Zsh с помощью set -K
.