Я предполагаю, что потенциальная проблема заключается в том, что ^
является допустимым символом в именах файлов, поэтому значение шаблона, содержащего его, меняется в зависимости от того, установлена ли опция или нет:
$ touch 'foo' 'bar' '^foo' '^bar'
$ ls ^foo*
^foo
$ setopt extendedglob
$ ls ^foo*
bar ^bar ^foo
Стандартная оболочка воспринимает ^
как обычный символ, поэтому эта функция, вероятно, отключена по умолчанию для совместимости.
Пока вы помните, какие параметры включены, т. е. знаете, как оболочка интерпретирует подстановочные знаки, оставление extended_glob
включенным не должно быть проблемой при интерактивном использовании.
Для скриптов, которые этого не ожидают, но используют странные имена файлов, это может быть проблемой, но не -интерактивные оболочки не должны читать .zshrc
, так что его установка должна быть в порядке. Только не устанавливайте его в .zshenv
.
Расширенные подстановочные скобки в стиле ksh -(@(...|...)
и т. д.,setopt kshglob
)имеют аналогичную проблему, поскольку они конфликтуют с тем, как zsh обрабатывает скобки в подстановочных скобках. @(f|b)
означает разные вещи в зависимости от того, установлен ли kshglob
или нет.
В моем фактическом файле конфигурации отсутствовала строка From=::/0
и он полагался наFamily=ipv6
(илиboth
). Как было предложено , эта проблема GitHub , Family=
не является ключом в systemd 242 (, новым в 243 ), поэтому From=::/0
по-прежнему необходим.