如何用同一变量替换printf格式字符串中所有%s占位符?
更简洁的实现方式
最优方案:利用printf的参数循环特性
printf本身支持循环复用参数列表——当格式字符串中的占位符数量多于提供的参数数量时,会从头重复取参数填充。你的格式串里有5个%s,只需要传递一次$REPLY即可,printf会自动用它填充所有占位符:
printf '%s=( "%s_actions" "%s_items" "%s_people" "%s_rooms" )\n' "$REPLY"
这样既避免了重复写$REPLY,代码也更简洁易维护。另外把格式串用单引号包裹,还能省去原代码里对双引号的转义,可读性更好。
其他可选方案(兼容性稍差或冗余)
如果你的shell支持数组扩展(比如bash),也可以通过生成重复参数的方式实现,但不如上面的方案简洁:
# bash中用大括号扩展生成重复参数 printf '%s=( "%s_actions" "%s_items" "%s_people" "%s_rooms" )\n' "$REPLY" "${REPLY}"{,,,}
这里${REPLY}{,,,}会生成4个重复的$REPLY参数,加上前面的1个,总共5个,刚好匹配格式串里的占位符数量。
内容的提问来源于stack exchange,提问作者MeepleDeMeep
相关产品推荐
相关产品推荐

