You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用同一变量替换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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 11:22:11