Bash中如何复用printf传入的参数实现格式串多次引用
Bash中printf按位置复用传入参数的实现方案
核心结论
Ubuntu 20.04环境下的Bash内置printf支持按位置索引复用已传入的参数值,无需重复传递相同值。
正确语法规则
Bash内置printf的参数位置引用格式为:%[n]$[格式符]
- n 为传入参数的位置序号,从1开始计数,与Bash内置位置变量的计数规则一致
- 位置标记必须紧跟在
%符号之后,放置在格式转换符(如代表字符串的s、代表整数的d)之前 - 无需添加方括号,也不能将位置标记放在格式符后方
适配需求的可运行命令
执行以下命令即可得到预期输出:
printf 'Hi %1$s, welcome to %2$s. %2$s is a great place to work. Thanks %1$s.\n' "John" "The Icecream Factory"
实际输出效果
Hi John, welcome to The Icecream Factory. The Icecream Factory is a great place to work. Thanks John.
常见踩坑说明
- 此前尝试的
%s[1]写法,会被printf解析为:用第一个传入参数替换%s占位符,后续的[1]会被当作普通静态文本直接输出,完全无法实现参数位置引用的效果 - 该位置引用语法不仅被Bash内置printf支持,Ubuntu 20默认搭载的GNU coreutils独立
printf命令(路径/usr/bin/printf)也完全兼容,无需额外适配 - 若传入参数数量少于占位符引用的位置数,缺失的位置会输出空值,与默认printf的缺参行为保持一致
内容的提问来源于stack exchange,提问作者algalg
相关产品推荐
相关产品推荐

