Как можно использовать значение переменной в качестве значения строки-разделителя для 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
в этом случае значение переменной подставляется. Обратите внимание, что эта форма является строгой; строковый аргумент не подвергается общему расширению параметров.