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
相关产品推荐
相关产品推荐

