Что означает символ `!` В Ubuntu [закрыто]

Я просмотрел все и не нашел, что ! означает, что в Ubuntu я все это вижу. например:

find -f -d !(.txt)
0
задан 9 April 2017 в 18:06

2 ответа

От: https://unix.stackexchange.com/a/3748

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

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

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

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

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

3
ответ дан 3 November 2019 в 11:56

Вне его использования в расширении истории оболочки, охваченном в ответе 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' например,

2
ответ дан 3 November 2019 в 11:56

Другие вопросы по тегам:

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