Что `(.N)` делает в этом расширенном глобе?
Документация Prezto содержит следующий пример сценария для настройки символических ссылок:
setopt EXTENDED_GLOB
for rcfile in "${ZDOTDIR:-$HOME}"/.zprezto/runcoms/^README.md(.N); do
ln -s "$rcfile" "${ZDOTDIR:-$HOME}/.${rcfile:t}"
done
Я все понимаю в "${ZDOTDIR:-$HOME}"/.zprezto/runcoms/^README.md(.N)
до (.N)
, Что значит (.N)
значит здесь?
Бонусный вопрос, что такое ${rcfile:t}
? Я понимаю, что это разрешает имя rcfile
но я не знаю что :t
для.
1 ответ
Нижняя часть отрицает или отрицает (.N)
все содержимое, которое начинается '^'
с README.md ^README.md(.N)
^
Символ - это регулярное выражение, означает начало чего-либо.
${rcfile:t}
Часть позволяет только имя, удаляя имя dir строки. Поэтому цикл создаст необходимую символическую ссылку для каждого файла конфигурации вашего zpresto dir.
Глобус (расширенный глобус, на самом деле) ^README.md(.N)
разворачивается на все файлы, кроме README.md, или возвращает ноль (пустая строка).
расширенный: устанавливается setopt
линия. Необходим для ^
(Смотри ниже).
файлы: точка в (.N)
обозначает файлы (не каталоги и не ссылки).
кроме README.md: ^
, Думать о ^
внутренние скобки в регулярном выражении. Это не означает, что файлы начинаются с README.md.
NULL: N в (.N)
, В нем говорится, что глобализация возвращает пустую строку, если расширение не удается. В противном случае эта строка выдаст ошибку, если ${ZDOTDIR:-$HOME}"/.zprezto/runcoms/"
имел только README.md
файл или нет файлов вообще.