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

Bash中变量存储printf格式化输出后格式丢失问题求助

问题:Bash变量存储格式化输出后echo丢失列间距的原因?

环境信息

  • Bash版本:4.2.46
  • 操作系统:Linux 3.10.0-1160.108.1.el7

现象描述

直接执行命令时格式正常

执行以下命令:

free -h | grep Mem | awk '{printf "%-10s %-10s %-10slala\n",$2,$3,$4}'

终端输出保留了设定的10字符宽度列间距:

7.6G 2.0G 3.4G lala

存入变量后echo输出格式丢失

将命令结果存入变量后用echo输出,列间距消失:

LINE=$(free -h | grep Mem | awk '{printf "%-10s %-10s %-10s\n",$2,$3,$4}')
echo $LINE

输出变为:

7.6G 2.0G 3.4G

尝试过$()、反引号、${}三种赋值方式,问题都存在。

原因解析

这是Bash的单词拆分机制导致的:

  • 当你写echo $LINE时,Bash会先把LINE变量里的所有连续空白(包括多个空格、制表符)都替换成单个空格,再把拆分后的内容传给echo,所以原来的多空格间距就被抹平了。
  • 而直接执行命令时,输出内容直接送到终端显示,不会经过Bash的单词拆分步骤,所以格式能完整保留。

解决办法

给变量加上双引号,让Bash把变量内容当作一个整体处理,跳过单词拆分:

echo "$LINE"

这样就能输出带正确列间距的内容了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 07:50:06