~ поведение оператора 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 если это имеет значение …

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* .

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

  • Как запустить команду в zsh, не нажимая ее на историю текущего сеанса?
  • Как включить команду «daw» vi в zsh?
  • Gnome-terminal и Zsh: сохранить текущий каталог на новой вкладке / окне
  • Отключить завершение имени файла подстроки в zsh
  • Как скопировать папки с неприятными именами, используя функцию оболочки
  • как я могу назвать команды git без «git» впереди?
  • Как я могу получить тип данных переменных в zsh?
  • Запустите zsh с помощью специального zshrc
  • Есть ли LC_COLLATE, который сортирует точку перед тире?
  • zsh завершение - показать больше параметров, чем просто псевдоним
  • терминал преобразует первую букву в верхний регистр
  • Символы имени действительной функции Shell
  • Linux и Unix - лучшая ОС в мире.