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

Bash脚本中使用cut命令截取含空格字符串的方法

Bash脚本按固定位置截取含空格内容的解决办法

你遇到的问题核心是没必要绕弯子用echo+cut的管道方式,反而容易因为变量引用不规范出问题。直接用Bash内置的字符串切片功能,就能精准截取还能完整保留空格。

推荐实现方式(高效无坑)

用Bash原生的参数扩展语法,不需要调用任何外部命令:

# 先确保line变量正确赋值(注意赋值时要加双引号,避免空格被拆分)
line="00577APP01     REC1_005 R_ESP01_R_TPP2SJAPPCB1"

CDSOC="${line:0:5}"   # 从第0位开始取5个字符,对应原需求的1-5位
CDAPP="${line:5:10}"  # 从第5位开始取10个字符,对应原需求的6-15位
IDEXT="${line:15}"    # 从第15位开始取到行尾,对应原需求的16位及以后

执行后IDEXT会完整拿到REC1_005 R_ESP01_R_TPP2SJAPPCB1,包括中间的空格。

原代码失效的可能原因

你的原代码理论上如果line变量引用正确(加双引号)是能正常工作的,但大概率是你在给line赋值时没加引号,导致空格把内容拆成了多个字段,比如错误赋值:

# 错误:这样会把line拆成三个部分,只保留第一个字段
line=00577APP01     REC1_005 R_ESP01_R_TPP2SJAPPCB1

正确的赋值必须用双引号包裹:

# 正确:完整保留所有空格和字符
line="00577APP01     REC1_005 R_ESP01_R_TPP2SJAPPCB1"

如果非要用cut命令

要是你坚持用cut,只要保证echo时正确引用line(加双引号),原代码就能正常输出完整的IDEXT:

CDSOC=$(echo "${line}" | cut -c1-5)
CDAPP=$(echo "${line}" | cut -c6-15)
IDEXT=$(echo "${line}" | cut -c16-)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 18:18:21