Какой символ подстановки в командной оболочке bash соответствует любому одному символу при работе с именами файлов?

03.04.2026 02:15
Обновлено: 03.04.2026 02:15

Подробное объяснение

В bash для glob-подстановок символ '?' соответствует ровно одному любому символу в имени файла или строке. Например, шаблон 'file?.txt' найдет 'file1.txt', 'fileA.txt', но не 'file10.txt', так как после 'file' должен быть ровно один символ перед расширением. Это отличается от символа '*', который соответствует любой последовательности символов (включая пустую строку), и от других символов, которые не являются стандартными подстановочными знаками для одиночных символов в bash.

Часто задаваемые вопросы (FAQ)

1 Чем отличается символ '?' от '*' в bash?
Символ '?' соответствует ровно одному любому символу, тогда как '*' соответствует любой последовательности символов (включая пустую). Например, 'file?.txt' найдет 'file1.txt', а 'file*.txt' найдет 'file.txt', 'file123.txt' и т.д.
2 Можно ли использовать символ '?' для соответствия нескольким символам?
Нет, каждый символ '?' в шаблоне соответствует ровно одному символу. Для соответствия нескольким символам нужно использовать несколько '?' подряд (например, 'file??.txt' для двух символов) или символ '*'.
3 Работает ли символ '?' только с именами файлов?
В основном он используется для glob-подстановок с именами файлов, но также может применяться в других контекстах bash, например, в условных выражениях или при работе со строками, где поддерживается подстановка по шаблону.

Типичные ошибки

1 Использование символа '*' вместо '?' для соответствия одному символу
Символ '*' соответствует любой последовательности символов, включая пустую, поэтому он может найти больше файлов, чем требуется, если нужно строго односимвольное соответствие.
2 Путаница с символами из регулярных выражений (например, '.')
В регулярных выражениях точка '.' соответствует одному символу, но в bash glob-подстановках используется '?'. Использование '.' в шаблонах bash не даст ожидаемого результата подстановки.
3 Считают, что символ '?' соответствует нулю или одному символу
В bash символ '?' всегда соответствует ровно одному символу, а не нулю или одному. Для соответствия нулю или одному символу нужно использовать другие конструкции, например, расширенные шаблоны с '?(pattern)'.

Установите расширение Poresh.Ai

Решайте тесты мгновенно с помощью искусственного интеллекта прямо в браузере

Автоматическое распознавание вопросов
ИИ-анализ и подробные объяснения
Работает на любых образовательных платформах
Безопасно и конфиденциально