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

