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