Linux - bash - 小坑: IFS
1. 概述
- for 循环读取文件内容时, 输出被打得稀碎
2. 场景
-
需求
- 读入文件
- 逐行显示
-
源文件
Continuous Delivery with Docker and Jenkins Jenkins 2 Up and Running Jenkins 2.x Continuous Integration Cookbook(3rd) Jenkins Fundamentals
-
脚本
#!/bin/bash for line in `cat ${1}` do echo ${line} done
-
问题
-
输出的结果, 是这样的
Continuous Delivery with Docker and Jenkins Jenkins 2 Up and Running Jenkins 2.x Continuous Integration Cookbook(3rd) Jenkins Fundamentals
-
3. 解决
-
原因
- 输出前, 需要制定 ifs
-
ifs
- linux 的环境变量
- 略
-
最终脚本
#!/bin/bash OLD_IFS=${IFS} IFS="" for line in `cat ${1}` do echo ${line} done IFS=${OLD_IFS}
4. 其他
-
ref
- SHELL 读取文件的每一行内容并输出
- 用 while 输出, 貌似就没有这个问题...
- Shell中IFS用法
- SHELL 读取文件的每一行内容并输出
-
疑问
- IFS 这玩意到底是什么鬼
- ${1} 是 bash 脚本的参数, 如果说, 脚本里有了 awk 命令, 需要引用 $1, 到底是哪个为准呢?
尽量尝试解释清楚; 自己校对能力有限, 如果有错误欢迎指出