Понимание восклицательного знака (!) в ударе

zmv

Оболочка zsh имеет мощный пакет, переименовывают названную команду zmv.

Сначала необходимо включить zmv управляйте следующим образом (это может войти в Ваш ~/.zshrc).

autoload zmv

Базовый синтаксис zmv PATTERN REPLACEMENT. Шаблон является выражением шарика оболочки. Части шаблона могут быть окружены круглыми скобками. Текст замены может содержать $1, $2, и т.д. относиться к Энной заключенной в скобки группе в шаблоне. Например:

zmv 'image(*.png)' '$1'

Можно также попросить, чтобы zsh автоматически определил $1, $2, и т.д. соответствовать подстановочным символам в шаблоне:

zmv -w 'image*.png' '$1.png'
111
23.08.2011, 15:42
5 ответов

! функция, которая первоначально появилась в оболочке C, назад в дни, прежде чем Вы могли рассчитывать на терминалы, чтобы иметь клавиши со стрелками. Особенно полезно, если Вы добавляете текущее число команды к подсказке (PS1="\!$ ") таким образом, можно быстро посмотреть экран для получения чисел для прошлых команд.

Теперь, когда можно использовать клавиши со стрелками и вещи как Ctrl-R для поиска истории команд, я не вижу много использования для функции.

Один вариант его, который Вы могли бы все еще найти полезным, !!, который повторно выполняет предыдущую команду. Самостоятельно, я не нахожу!! Войдите немного быстрее, чем просто , Входят, но может быть полезно при объединении в большую команду.

Пример: общая ошибка пилота на sudo основанные системы должны забыть sudo префикс на команде, которая требует дополнительных полномочий. Новичок перепечатывает целую команду. Прилежный студент редактирует команду из истории команд оболочки. Просвещенные типы sudo !!.

Bash позволяет Вам отключить ! обработка в оболочке с set +o histexpand или set +H. Можно отключить его в Zsh с set -K.

151
27.01.2020, 19:29
  • 1
    я нахожу, что Ctrl-J Ctrl-P довольно быстр; быстрее, чем Входят, по крайней мере. –  ephemient 05.11.2010, 03:55
  • 2
    Если Вы просто хотите выполнить последнюю команду,/вводить прекрасен, но если Вы хотите добавить к ней в некотором роде (скажите, Вы забыли sudo, или что-то), затем можно сделать sudo !!, например. Это могло бы быть немного быстрее, чем "Up/Ctrl-A (или Домой, если Вам повезло),/sudo/space/enter". YMMV. :) –   14.01.2011, 22:57
  • 3
    @AquariusPower: Просто заключите его в кавычки. Также echo 'Hi!' или echo "Hi!" или echo Hi\!. Все делают то же самое. –  Warren Young 18.07.2013, 19:14

Если нет более длинного ответа здесь существует, конечно, один на Суперпользователе, так как я недавно считал тот. В странице справочника удара можно найти, что огромный раздел назвал РАСШИРЕНИЕ ИСТОРИИ по вопросу.

Можно сделать большое количество больше, чем просто выполненный последняя команда или команда номер X. Можно сделать вещи как !cat выполнять последнюю команду, которая запустилась с cat. Или !?bash?:s/bash/csh/ выполняет последнюю команду, содержащую bash но замены это с csh.

51
27.01.2020, 19:29
  • 1
    Хотя не непосредственно ответ на вопрос OP, этому нужен путь больше upvotes. Настолько полезный! Спасибо, Havok. –  malvim 30.04.2015, 22:09
  • 2
    Мм, я должен действительно изучить страницу справочника, прежде чем я начну гуглить. –  erikbwork 27.07.2015, 16:39
  • 3
    !!:s/bash/csh/ на самом деле выполняет последнюю команду, затем заменяет удар csh, если существующий. Не последняя команда, которая включала удар. Это было бы !?bash?:s/bash/csh/ или возможно !?bash?:s/%/csh/ –  cde 24.01.2016, 16:31

Мой друг послал мне по электронной почте это:

Это - часть библиотеки истории GNU. В ударе это используется, чтобы повторно выполнить команды в Вашей истории. Если Вы хотите быть хардкором, grep для history_expansion_char в bash-4.1/lib/readline/histexpand.c для деталей реализации.

4
27.01.2020, 19:29

Намного больше может быть, покончили ! такой как:

  • выполните команду, которая вводится перед 3 командами: !-3
  • выполните команду, которая запускается с !ls

и многое другое. См. 15 Примеров Расширения Истории Bash Linux, которые Необходимо Знать

40
27.01.2020, 19:29
  • 1
    Upvoted это. Ни один из других ответов не имел ни одного из этих умных приемов. –  Gergely Lukacsy 15.02.2017, 16:38

Конечно, вы можете !!повторно использовать последнюю команду в оболочке bash. И затем есть !$для повторного использования последней части вашей последней команды.

напр. просмотреть какой-нибудь файл

less path/to/your/file.txt

Если теперь вы хотите отредактировать тот же файл, вы можете использовать !$, чтобы получить только путь к файлу из последней команды

vim !$

РЕДАКТИРОВАТЬ:

Вы можете использовать все аргументы предыдущей команды с!*

напр. :Это создаст несколько файлов и удалит их все

$ touch a.txt b.txt c.txt d.txt
$ rm !*

Опять же, вы можете использовать определенный аргумент предыдущей команды

напр. Это создаст 4 файла и удалит 3-й файл (c.txt )

.
$ touch a.txt b.txt c.txt d.txt
$ rm !:3

Аналогично,вы можете использовать ряд аргументов из последней команды следующим образом

$ touch a.txt b.txt c.txt d.txt
$ rm !:2-4

Это приведет к повторному использованию аргументов со 2 по 4, которые оценивают выражение какrm b.txt c.txt d.txt

8
27.01.2020, 19:29

Теги

Похожие вопросы