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

Shell脚本printf输出时前缀随变量多行内容重复打印如何解决

问题原因
  • 当你在printf的参数中直接使用未加双引号的$var、$my_time时,Bash会默认按空白符(空格、换行、制表符)将变量内容拆分为多个独立字段
  • printf的规则是当提供的参数数量超过占位符数量时,会重复套用格式字符串匹配所有参数,所以每个拆分出来的字段都会单独带一次前缀输出
解决方法

给所有传入printf的变量加上双引号,强制Bash将整个变量内容作为单个参数传入,不会触发字段拆分。

修改后的完整代码
#!/bin/bash
for n in 1 2;
do 
    var=$(bc -l <<< 'scale=100; 4*a(1)')
    my_time=$( (time bc -l <<< 'scale=100; 4*a(1)') 2>&1 >/dev/null)
    echo "$var"
    echo "$my_time"       
    printf "Value of PI is :%s\n" "$var"
    printf "Time calculated is :%s\n" "$my_time"
done
效果验证

修改后输出会变成预期格式:

3.141592653589793238462643383279502884197169399375105820974944592307\
8164062862089986280348253421170676
real 0m0.005s
user 0m0.004s
sys 0m0.000s
Value of PI is :3.141592653589793238462643383279502884197169399375105820974944592307\
8164062862089986280348253421170676
Time calculated is :real 0m0.005s
user 0m0.004s
sys 0m0.000s

如果需要把时间输出合并为单行,可以额外对my_time做换行替换处理,比如my_time=$(echo "$my_time" | tr '\n' ' ')。

内容的提问来源于stack exchange,提问作者TKr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 14:57:04