Будет ли «*» (звезда) в globbing соответствовать только символам (т. Е. Az и 0-9)?

Здесь я задаю простой вопрос: соответствует ли символ * (звездочка звезды) только символам (буквам и цифрам) в стиле glob? Или это также будет соответствовать специальным символам?

В bash * соответствует всем, а в csh * соответствует только буквенно-цифровым символам.

Есть ли какое-либо правило совместимости для этого? Может ли кто-нибудь уточнить?

2 Solutions collect form web for “Будет ли «*» (звезда) в globbing соответствовать только символам (т. Е. Az и 0-9)?”

* – это шаблон имени файла, который соответствует любой последовательности символов.

При использовании в качестве glob (в расширении / генерации имени файла) * не соответствует символам косой черты (ну, шаблон проверяется на список файлов в текущем каталоге) или ведущую точку.

Теперь определение характера меняется со временем. В настоящее время определение или символ зависят от локали. В настоящее время большинство локалей используют кодировку UTF-8 для текста, что означает, что символы являются последовательностями байтов переменной длины. Например, a равно 0x61, а é – 0xc3 0xa9. В UTF-8 не все последовательности байтов образуют допустимые символы. Например, 0x61 0xc3 0x61 недействителен. Пока 0x61 переводит на a , 0xc3 не может перевести символ.

В большинстве оболочек * также будет соответствовать несимволам, поэтому * будет распространяться на все файлы в текущем каталоге, имя которого не начинается . независимо от того, являются ли байты в именах файлов действительными символами в текущей локали или нет. Исключение составляет, по крайней мере, csh-20110502, найденный в моей системе Debian (сам по себе на основе OpenBSD csh).

 $ touch "$(printf '\xc3')" "$(printf '\xc3\xa9')" $ ls ? é $ locale charmap UTF-8 $ bash -c 'echo *' | sed -nl \303 \303\251$ $ csh -c 'echo *' | sed -nl \303\251$ , $ touch "$(printf '\xc3')" "$(printf '\xc3\xa9')" $ ls ? é $ locale charmap UTF-8 $ bash -c 'echo *' | sed -nl \303 \303\251$ $ csh -c 'echo *' | sed -nl \303\251$ 

\303 (представление байта 0xc3) отсутствует на выходе с помощью csh потому что это не допустимый символ.

 $ LC_ALL=C csh -c 'echo *' | sed -nl \303 \303\251$ 

В локали C символы отображаются в байтах (хотя символы для значений выше 0x7f не определены), поэтому 0xc3 является одним символом, а 0xc3 0xa9 – двумя символами.

В любом случае, нет причин, по которым вы бы использовали этот csh на Debian. Используйте tcsh если вы хотите использовать csh подобную оболочку, но лучше всего избегать использования csh .

Из базовых спецификаций Open Group Issue 6 IEEE Std 1003.1 Раздел 2.13.2. Шаблоны, соответствующие нескольким символам

Звездочка ('*') – это шаблон, который должен соответствовать любой строке, включая пустую строку.

Это означает, что * будет соответствовать любому персонажу без ограничений.

  • Поиск используемого терминала
  • Добавление соответствующих элементов из двух массивов в новый массив с использованием оболочки csh?
  • Показать каждую установленную оболочку командной строки?
  • Какая программа вызывает csh.cshrc?
  • как сделать обратный срез?
  • Как указать аргументы для возврата всех файлов точек, но не. а также ..?
  • Список файлов в иерархии каталога
  • Какая разница между файлами .login и .cshrc?
  • Команда ulimit не найдена (без sudo) и ошибка - coredumpsize: не может установить ограничение (операция не разрешена)
  • Вставка файла в другой файл с помощью sed
  • Выражение Grep со специальными именами файлов
  • Linux и Unix - лучшая ОС в мире.