zsh `j: の区切り文字として変数を使用する:`パラメータ拡張フラグ

zsh `j: の区切り文字として変数を使用する:`パラメータ拡張フラグ

変数の値を、zshj:<delimiter>:パラメータ拡張フラグの区切り文字列の値として使用するにはどうすればよいですか?

それができない場合、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このオプションでは文字列引数は、変数の値が代入される形式になる。 この形式は厳密であることに注意してください。文字列引数は一般的なパラメータ展開を受けません。

関連情報