Usando variable como delimitador para zsh `j::` indicador de expansión de parámetros

Usando variable como delimitador para zsh `j::` indicador de expansión de parámetros

¿Cómo puedo usar el valor de una variable como valor de la cadena delimitadora para el j:<delimiter>:indicador de expansión del parámetro zsh?

Si no puedo hacer eso, ¿cuál es la forma más eficiente y concisa de utilizar una variable para delimitar valores en zsh?

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

Respuesta1

Utiliza el pindicador de expansión de parámetros:

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

Citando el documento (el énfasis es mío):

p

Reconozca las mismas secuencias de escape que la función print incorporada en los argumentos de cadena de cualquiera de los indicadores descritos a continuación que siguen a este argumento.

Alternativamente,con esta opción los argumentos de cadena pueden estar en la forma $VARen cuyo caso se sustituye el valor de la variable. Tenga en cuenta que este formulario es estricto; el argumento de cadena no sufre una expansión de parámetros general.

información relacionada