如何使用变量的值作为 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
在这种情况下变量的值将被替换。请注意,此形式是严格的;字符串参数不进行一般参数扩展。