Что `(.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 файл или нет файлов вообще.

Другие вопросы по тегам