Linux 下 Shell 命令 IFS 分隔符 -- 应用场景 && 解决办法

Linux 下 Shell 命令 IFS 分隔符 – 应用场景 && 解决办法

场景一 – 变量输出

问题

问题描述
  通过 "cat" 读取文件行,作为变量后,通过 echo 输出变量,变量值中 "相连的多个空格""合并为一个空格" 输出。
测试文件
$ cat test_IFS1.txt 
a b c d e f  g   h    i
1 2 3    4    5    6
操作
$ line=`tail -1 test_IFS1.txt` && echo ${line}
1 2 3 4 5 6 			# 输出结果中,空格被合并了

解决办法

通过定义 IFS 分隔符解决
$ IFS="\n" && line=`tail -1 test_IFS1.txt` && echo ${line} && unset IFS
1 2 3    4    5    6

场景二 – 文件读取

问题

问题描述
'cat 命令' 读取文件,通过 'for 循环' 输出每行内容,当行中存在空格,'echo 输出' 异常。
测试文件
$ cat test_IFS2.txt 
line1     ---     word1 word2 word3 word4
line2     ---     word1 word2 word3 word4
line3     ---     word1 word2 word3 word4
line4     ---     word1 word2 word3 word4
操作
$ for line in `cat test_IFS2.txt`; do echo ${line}; done
line1
---
word1
word2
word3
word4
line2
---
word1
word2
word3
word4
line3
---
word1
word2
word3
word4
line4
---
word1
word2
word3
word4

解决办法

方法一:定义 IFS 分隔符
  • IFS=$'\n' – 输出正常
# IFS=$'\n' -- 输出正常
$ IFS=$'\n' && for line in `cat test_IFS2.txt`; do echo ${line}; done && unset IFS
line1     ---     word1 word2 word3 word4
line2     ---     word1 word2 word3 word4
line3     ---     word1 word2 word3 word4
line4     ---     word1 word2 word3 word4
  • 说明
- IFS='\n' -- 将字符 n 作为 IFS 的换行符
- IFS=$"\n" -- \n确实通过 '$' 转化为了换行符,但仅当被解释时(或被执行时)才被转化为换行符


- IFS=$'\n' -- 输出正常
方法二:while read 方式解决
$ cat test_IFS2.txt | while read line; do echo ${line}; done
line1 --- word1 word2 word3 word4
line2 --- word1 word2 word3 word4
line3 --- word1 word2 word3 word4
line4 --- word1 word2 word3 word4

参考

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值