~ поведение оператора glob с пустым шаблоном

В документации ~ можно использовать в качестве оператора glob при установке EXTENDED_GLOB , что позволяет создавать такие конструкции, как

 print -rl glob*~globA*~glob*B 

так что все, что соответствует glob* но не соответствует globA* и glob*B
Отлично:

 touch file{1,2,3,4{,5}} setopt extendedglob 

Теперь

 print -rl file*~f*3~file4* 

ведет себя так, как ожидалось:

 file1 file2 

но при использовании пустого шаблона

 print -rl file*~f*3~~file4* 

печать

 file1 file2 file3 

Похоже, что только последний шаблон используется для фильтрации результатов 1-го шара (2-й и 3-й – пустые – игнорируются).

 print -rl file*~f*3~file4*~~ 

производит

 file1 file2 file4 file45 

так что теперь используется только второй …
Странно, что если шаблон после 1-й тильды пуст, он вообще не работает

 print -rl file*~~f*3~file4* 

ошибки с

 zsh: no matches found: file*~~f*3~file4* 

Что мне здесь не хватает?


это с zsh 5.3.1 если это имеет значение …

  • Добавление путей к PATH с использованием многострочного синтаксиса
  • Каждый раз, когда я запускаю tmux, запускается новый дочерний процесс ssh-agent (zshell)
  • Как переключиться с bash на zsh?
  • Предотвращение использования zsh от использования псевдонимов в CWD (подсказка)
  • Автозаполнение zsh для символических ссылок
  • zsh завершение по истории не работает
  • xargs не генерирует правильную команду
  • Почему требуется перезагрузка ежедневной .zshrc с использованием псевдонима, содержащего $ (date -u +% Y% m% d)?
  • One Solution collect form web for “~ поведение оператора glob с пустым шаблоном”

    ~~ не использует пустой шаблон. Вместо этого он выполняет одну из двух задач:

    • В конце всего рисунка буквально соответствует « ~~ ».
    • В середине буквально совпадает с одним « ~ », затем переходит к следующему исключенному шаблону (то есть к букве ~ за которым следует оператор ~ ).

    Если мы расширим набор файлов несколькими дополнительными функциями, мы увидим, что это произойдет:

     touch file3~ file3~~ file4~ file4~~ 

    Теперь запустите вашу первую нечетную команду:

     print -rl file*~f*3~~file4* file1 file2 file3 file3~~ 

    file3~ был исключен, как и все три file4* s. file3~~ все еще существует, потому что он не соответствует f*3~ .

    Второй:

     print -rl file*~f*3~file4*~~ file1 file2 file3~ file3~~ file4 file45 file4~ 

    file4~~ только file4~~ , потому что это единственный соответствующий file4*~~ .

    Окончательный случай теперь имеет выход:

     print -rl file*~~f*3~file4* file3~ file3~~ 

    так как это два файла, соответствующие file*~ которые не соответствуют ни f*3 ни file4* .

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

    Interesting Posts

    Ошибка сегментации (сброс ядра) – где? что это? и почему?

    Записи Я могу безопасно исключить выполнение резервных копий

    Могу ли я изменить поведение события (геймпада)?

    Не могу играть в полноэкранный режим, видеть только черные, но слышать их

    Правило Polkit для файлов блока шаблонов systemd

    Проблемы с монтированием и автомонтированием и безопасностью

    как указать порт пересылки при использовании нескольких служб tsocks?

    Crunchbang / Debian apt-preferences

    find и md5sum не дают никакого выхода (find -o limit?)

    Странное поведение процесса на виртуализированном Ubuntu

    Почему я все еще получаю приглашение пароля с помощью ssh с аутентификацией ключа?

    Как изменить цветовую схему LibreOffice на более оригинальный цвет?

    Как переключиться в консольный режим в режиме графического интерфейса пользователя в Suse Linux Enterprise Server 10?

    Различия между комплектом разработчика RHEL и другими версиями

    Почему sudo не запрашивает пароль снова после того, как «команда не найдена»?

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