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

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

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

3 ответа

Вне его использования в расширении истории оболочки, охватываемом ответом Android Dev, наиболее распространенным явлением является выражение отрицания или набор дополнений. Например, в простых оболочках оболочки

ls [!a-c]*

перечислены файлы, кроме тех, которые начинаются с символа в диапазоне a-c. Вы также можете видеть, что это написано с помощью каретки вместо восклицательного знака [^a-c] (заимствовано из синтаксиса регулярных выражений), хотя последняя форма не соответствует POSIX.

Bash расширяет понятие дополнения к целым образцам в ответе Android Dev , так что, например,

ls !(*.txt)

будет перечислять все файлы, исключая те, которые заканчиваются на a .txt.

Некоторые отдельные команды также независимо используют ! в смысле отрицания или логического дополнения - например

find ! -name '*.txt'

, хотя GNU find не менее также поддерживает более длинную форму -not в этом контексте (хотя это опять же не соответствует POSIX).

Ваш пример, похоже, путает эти последние два использования - он выглядит как расширенный glob оболочки оболочки, но встречается как часть команды find, где такое расширение оболочки не будет valid1.

1 расширенный shell glob можно было бы использовать для построения списка каталогов для find для поиска - например, find !(foo*)/ -name '*.bar', например

2
ответ дан 18 July 2018 в 15:15

Вне его использования в расширении истории оболочки, охватываемом ответом Android Dev, наиболее распространенным явлением является выражение отрицания или набор дополнений. Например, в простых оболочках оболочки

ls [!a-c]*

перечислены файлы, кроме тех, которые начинаются с символа в диапазоне a-c. Вы также можете видеть, что это написано с помощью каретки вместо восклицательного знака [^a-c] (заимствовано из синтаксиса регулярных выражений), хотя последняя форма не соответствует POSIX.

Bash расширяет понятие дополнения к целым образцам в ответе Android Dev , так что, например,

ls !(*.txt)

будет перечислять все файлы, исключая те, которые заканчиваются на a .txt.

Некоторые отдельные команды также независимо используют ! в смысле отрицания или логического дополнения - например

find ! -name '*.txt'

, хотя GNU find не менее также поддерживает более длинную форму -not в этом контексте (хотя это опять же не соответствует POSIX).

Ваш пример, похоже, путает эти последние два использования - он выглядит как расширенный glob оболочки оболочки, но встречается как часть команды find, где такое расширение оболочки не будет valid1.

1 расширенный shell glob можно было бы использовать для построения списка каталогов для find для поиска - например, find !(foo*)/ -name '*.bar', например

3
ответ дан 24 July 2018 в 20:35

Вне его использования в расширении истории оболочки, охватываемом ответом Android Dev, наиболее распространенным явлением является выражение отрицания или набор дополнений. Например, в простых оболочках оболочки

ls [!a-c]*

перечислены файлы, кроме тех, которые начинаются с символа в диапазоне a-c. Вы также можете видеть, что это написано с помощью каретки вместо восклицательного знака [^a-c] (заимствовано из синтаксиса регулярных выражений), хотя последняя форма не соответствует POSIX.

Bash расширяет понятие дополнения к целым образцам в ответе Android Dev , так что, например,

ls !(*.txt)

будет перечислять все файлы, исключая те, которые заканчиваются на a .txt.

Некоторые отдельные команды также независимо используют ! в смысле отрицания или логического дополнения - например

find ! -name '*.txt'

, хотя GNU find не менее также поддерживает более длинную форму -not в этом контексте (хотя это опять же не соответствует POSIX).

Ваш пример, похоже, путает эти последние два использования - он выглядит как расширенный glob оболочки оболочки, но встречается как часть команды find, где такое расширение оболочки не будет valid1.

1 расширенный shell glob можно было бы использовать для построения списка каталогов для find для поиска - например, find !(foo*)/ -name '*.bar', например

3
ответ дан 31 July 2018 в 23:37

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

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