Я просмотрел все и не нашел, что !
означает, что в Ubuntu я все это вижу. например:
find -f -d !(.txt)
От: https://unix.stackexchange.com/a/3748
!
функция, которая первоначально появилась в оболочке C, назад в дни, прежде чем Вы могли рассчитывать на терминалы, чтобы иметь клавиши со стрелками. Особенно полезно, если Вы добавляете текущее число команды к подсказке (PS1="\!$ "
) таким образом, можно быстро посмотреть экран для получения чисел для прошлых команд.Теперь, когда можно использовать клавиши со стрелками и вещи как Ctrl-R для поиска истории команд, я не вижу много использования для функции.
Один вариант его, который Вы могли бы все еще найти полезным,
!!
, который повторно выполняет предыдущую команду. Самостоятельно, я не нахожу!! Войдите немного быстрее, чем просто ↑, Входят, но может быть полезно при объединении в большую команду.Пример: общая ошибка пилота на
sudo
основанные системы должны забытьsudo
префикс на команде, которая требует дополнительных полномочий. Новичок перепечатывает целую команду. Прилежный студент редактирует команду из истории команд оболочки. Просвещенные типыsudo !!
.Bash позволяет Вам отключить
!
обработка в оболочке сset +o histexpand
илиset +H
. Можно отключить его в Zsh сset -K
.
Вне его использования в расширении истории оболочки, охваченном в ответе Dev Android, наиболее популярный способ использования должен выразить отрицание или установить образование дополнения. Например, в простых шариках оболочки
ls [!a-c]*
файлы списков кроме тех, которые запускаются с символа в диапазоне a-c
. Можно также видеть записанный с каре вместо восклицательного знака [^a-c]
(одолженный от синтаксиса регулярного выражения), хотя последней формой не является совместимый POSIX.
Bash расширяет понятие образования дополнения к целым шаблонам в его расширенных шариках оболочки так, чтобы, например,
ls !(*.txt)
перечислил бы все файлы, исключая тех, которые заканчиваются в a .txt
расширение.
Некоторые отдельные команды также независимо используют !
в смысле отрицания или логического образования дополнения - например,
find ! -name '*.txt'
хотя GNU find
по крайней мере также поддерживает более длинную форму -not
в этом контексте (хотя снова это не совместимый POSIX).
Ваш пример, кажется, путает эти последние два использования - он похож на расширенный шарик оболочки, но происходит как часть a find
управляйте, где такое расширение оболочки не было бы valid1.
1 расширенный шарик оболочки мог однако использоваться для построения списка каталогов для find
искать - что-то как find !(foo*)/ -name '*.bar'
например,