Будет ли «*» (звезда) в 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 - Как проверить, не является ли вход НЕ
  • перенаправление stderr не работает в csh
  • Есть ли csh to bash script translator?
  • Как выйти из сеанса CSH?
  • Псевдонимы в csh
  • error: слишком много слов `` в cat
  • Как изменить оболочки через скрипт?
  • Передача специальных символов из Perl-скрипта в csh
  • Зачем запускать путь к каталогу в качестве команды, возвращать «разрешение отказано», а не «команда не найдена»?
  • Правильное определение многострочного приглашения в tcsh
  • Interesting Posts

    Можно ли установить директивы mod_expires, зависящие от REMOTE_ADDR?

    gnome-screenshot не автосохраняется, а интерактивно запрашивает каталог сохранения

    Дублируйте выбранные слова с помощью sed и замените их

    Создание воспроизводимого пакета .deb

    Не удается использовать компьютер после того, как Linux mint переходит в спящий режим

    Уменьшить использование файлов в текстовой обработке

    Как запустить привилегированный скрипт bash как не root?

    Эхо переменная columnwise

    Lp и lpr при постскриптуме

    Где я могу найти сообщения о последней неудачной загрузке Linux?

    Удаление файла с непечатаемыми символами

    передать параметры скрипту bash, используя атрибуты шеф-повара

    Существуют ли версии Unix, которые не имеют awk при установке по умолчанию?

    Как запретить доступ к пользовательскому пространству имен для программы или пользователя?

    Несколько видеокарт – карта NVIDIA GT218 на Fedora 28

    Linux и Unix - лучшая ОС в мире.