Что означает ${ (%):-%n}?

#shell #zsh

Вопрос:

Я не знаю, что означает «${ (%):-%n}«.

 ${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh
 

Вывод echo ${(%):-%n} — это мое имя пользователя.

выход:
выход

Комментарии:

1. Видеть: Что :- имею в виду в сценарии оболочки и Как оцениваются переменные внутри фигурных скобок

2.@Nick, это не совсем помогает, так как имя параметра ${:-foo} без параметра относится к zsh и там не упоминается

Ответ №1:

(%) Это флаг расширения параметра, в частности тот, который вызывает расширение escape-последовательностей в значении параметра. Например,

 % x="%n"
% echo $x
%n
% echo ${(%)x}
pi
 

:- Оператор без имени параметра приводит к тому, что следующий текст рассматривается как значение расширения:

 % echo ${:-%n}
%n
 

Сложите их вместе, и вы получите выражение, которое расширяется до вашего текущего имени пользователя. Строка %n является результатом расширения параметра, которое также подвергается оперативному расширению.

 % echo ${(%):-%n}
pi