Использование переменной в качестве разделителя для zsh `j::` флаг расширения параметра

Использование переменной в качестве разделителя для zsh `j::` флаг расширения параметра

Как можно использовать значение переменной в качестве значения строки-разделителя для j:<delimiter>:флага расширения параметра zsh?

Если я не могу этого сделать, какой наиболее эффективный и лаконичный способ использовать переменную для разграничения значений в zsh?

array=(a b)
delimiter=,
printf -- "%s" ${(j:,:)array}          # good: outputs: a,b
printf -- "%s" ${(j:$delimiter:)array} # bad:  outputs: a$delimiterb

решение1

Используйте pфлаг расширения параметра:

printf %s ${(pj:$delimiter:)array}

Цитирую документ (выделено мной):

p

Распознает те же управляющие последовательности, что и встроенная функция print в строковых аргументах для любого из флагов, описанных ниже, которые следуют за этим аргументом.

В качестве альтернативы,с этой опцией строковые аргументы могут быть в форме , $VARв этом случае значение переменной подставляется. Обратите внимание, что эта форма является строгой; строковый аргумент не подвергается общему расширению параметров.

Связанный контент