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

使用tr命令按制表符拆分字符串不生效,脚本无输出如何解决

问题原因
  • 全局设置IFS=""是核心问题:Shell的IFS(内部字段分隔符)默认包含空格、制表符、换行符,负责字符串到数组/字段的拆分逻辑。手动将IFS设为空后,执行arr=($(echo $l | tr "\t" " "))时,即使tr已经把制表符替换为空格,Shell也不会按空格拆分字符串,整行内容会全部存入arr[0],arr[1]为空,因此没有任何内容输出。
  • for l in cat gift.txt``的写法本身存在缺陷:搭配空IFS设置时,整个文件的内容会被当成单个字符串赋值给l,无法实现逐行读取的预期。
解决方法

推荐直接使用read命令按制表符拆分字段,无需额外调用tr,性能和可靠性更高:

#!/bin/bash
while IFS=$'\t' read -r id item; do
  echo "$item"
done < gift.txt

如果要保留原有tr的实现逻辑,删除全局的IFS=""设置,同时将逐行读取逻辑改为更稳定的while read写法即可:

#!/bin/bash
while read -r l; do
  arr=($(echo "$l" | tr "\t" " "))
  echo ${arr[1]}
done < gift.txt

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 17:24:01