Usando variável como delimitador para zsh `j::` sinalizador de expansão de parâmetro

Usando variável como delimitador para zsh `j::` sinalizador de expansão de parâmetro

Como posso usar o valor de uma variável como o valor da string delimitadora do j:<delimiter>:sinalizador de expansão do parâmetro zsh?

Se não posso fazer isso, qual é a maneira mais eficiente e concisa de usar uma variável para delimitar valores em zsh?

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

Responder1

Você usa o psinalizador de expansão de parâmetro:

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

Citando o documento (ênfase minha):

p

Reconheça as mesmas sequências de escape que os argumentos de string incorporados print para qualquer um dos sinalizadores descritos abaixo que seguem este argumento.

Alternativamente,com esta opção os argumentos da string podem estar na forma, $VARcaso em que o valor da variável é substituído. Observe que este formulário é rigoroso; o argumento string não sofre expansão de parâmetro geral.

informação relacionada