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

Makefile中含转义TAB字符的Bash命令执行失败问题解决

GNU Makefile中Tab字符转义导致sort命令报错的解决办法

问题场景

在Ubuntu系统的GNU Makefile中编写了如下命令:

.PHONY: stack-use
stack-use: $(BUILD_PATH)/$(TARGET).elf
    @cat build/*.su | sort -t$$'\t' -k2 -nr | awk -F'\t' '{ if($$2>0) {print $$0}}' | column -s$$'\t' -t

执行make -n stack-use时,输出的命令如下:

cat build/*.su | sort -t$'\t' -k2 -nr | awk -F'\t' '{ if($2>0) {print $0}}' | column -s$'\t' -t

直接运行该输出命令能得到预期结果,但通过make执行时却报错:

sort: multi-character tab ‘$\\t’

报错原因

Make在解析命令时会对反斜杠进行转义,导致Shell无法识别预期的TAB字符(\t),反而将其解析成了反斜杠加t的组合,因此sort命令认为分隔符是多字符的$\\t,从而报错。

解决办法

使用$(printf '\t')生成实际的Tab字符,替换原来的$$'\t'写法,避免转义问题。最终可用的Makefile命令如下:

.PHONY: stack-use
stack-use: $(BUILD_PATH)/$(TARGET).elf
    @cat build/*.su | sort -t"$(printf '\t')" -k2 -nr | awk -F'\t' '{ if($$2>0) {print $$0}}' | column -s"$(printf '\t')" -t

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 17:30:12