Shell脚本for循环逐行原样输出
问题描述
我在写Shell脚本时遇到了这样一个问题。
需求:从文件中逐行遍历然后输出。
我的文件是这样的:
文章图片
image.png 我的脚本是这样的:
文章图片
image.png 我的输出是这样的:
文章图片
image.png 诶?
为什么和我源文件的行数不一致呢?
解决方法
后来我查资料发现:
bash shell会将下列字符当作字段分隔符:空格、制表符、换行符
如果我们想忽略掉这些分隔符,需要设IFS的变量值。
在for循环前加上这个IFS赋值操作就可以了
IFS=$'\n'
文章图片
image.png
然后我们再执行一下脚本
文章图片
image.png 【Shell脚本for循环逐行原样输出】看,现在输出的结果和我们txt文件中的格式是一样的了。
但是这样赋值会有问题,如果脚本中其他方法也用到了for循环,可能影响其他for循环的输出结果,那我们可以用这种方式给IFS赋值
IFS.OLD=$IFS #默认的IFS的数值-->也是环境变量!
IFS=$'\n' #自定义的IFS数值<在代码中使用新的IFS值> #待使用自定义IFS的部分!
IFS=$IFS.OLD #恢复默认的IFS
推荐阅读
- Shell-Bash变量与运算符
- 「按键精灵安卓版」关于全分辨率脚本的一些理解(非游戏app)
- whlie循环和for循环的应用
- ffmpeg源码分析01(结构体)
- Linux|109 个实用 shell 脚本
- 【WORKFOR】最真的自己
- R|R for data Science(六)(readr 进行数据导入)
- performSelectorOnMainThread:withObject:waitUntilDone:参数设置为NO或YES的区别
- JavaScript|JavaScript — 初识数组、数组字面量和方法、forEach、数组的遍历
- Xshell5|Xshell5 远程连接本地虚拟机Ubuntu16