如何使用bash的printf命令按指定列宽对文本进行折行处理
实现代码
你可以直接使用如下纯bash+printf的方案,完全复现fold -10的输出效果:
# 定义变量 drive=/test1/test2/test3/test4 # 指定折行宽度 col_width=10 # 循环截取固定长度子串并输出 for ((offset=0; offset<${#drive}; offset+=col_width)); do printf "%s\n" "${drive:offset:col_width}" done
输出验证
执行上述代码后得到的输出和echo $drive | fold -10完全一致:
/test1/tes t2/test3/t est4
原理说明
- 用
${#drive}获取目标字符串的总长度 - 用bash内置的子串扩展语法
${drive:offset:col_width},从偏移量offset位置开始,最多截取col_width个字符 - 每次截取后用
printf输出子串并追加换行,最终实现按指定列宽折行的效果
该方案全部使用bash内置功能和printf实现,无需依赖fold等外部命令,兼容性更好。
内容的提问来源于stack exchange,提问作者satti
相关产品推荐
相关产品推荐

