shell把每个 $IFS 字符对待成一个分隔符,且基于这些字符把其他扩展的结果分割。如果 IFS 未设置,或者它的值正好是 “‘<space><tab><newline>’”,那么任何IFS 字符的序列就送往分割字。

自写一个简单的脚本:
#!/bin/bash
for i in `cat /etc/passwd`
do
        echo $i
done
输出结果:
test33:x:506:100::/home/test33:/bin/bash
test44:x:507:512::/home/test44:/bin/bash
test55:x:508:100::/home/test55:/bin/bash
test66:x:509:100::/home/test66:/bin/bash

假如/etc/passwd中有第五列,即注释,恰恰注释中包含空格,如下:
test33:x:506:100::/home/test33:/bin/bash
test44:x:507:512::/home/test44:/bin/bash
test55:x:508:100::/home/test55:/bin/bash
test66:x:509:100:user test1:/home/test66:/bin/bash

执行的结果是什么呢,乱了:
test33:x:506:100::/home/test33:/bin/bash
test44:x:507:512::/home/test44:/bin/bash
test55:x:508:100::/home/test55:/bin/bash
test66:x:509:100:user
test1:/home/test66:/bin/bash

程序把注释中的空格看作字分隔符了。为了解决这一问题,可用$IFS变量:
#!/bin/bash
IFS_old=$IFS      #将原IFS值保存,以便用完后恢复
IFS=$’\n’        #更改IFS值为$’\n’ ,注意,以回车做为分隔符,IFS必须为:$’\n’
for i in `cat m.txt`
do
        echo $i
done
IFS=$IFS_old      #恢复原IFS值

再次运行,得到预期结果:
test33:x:506:100::/home/test33:/bin/bash
test44:x:507:512::/home/test44:/bin/bash
test55:x:508:100::/home/test55:/bin/bash
test66:x:509:100:user test1:/home/test66:/bin/bash

转载于:https://blog.51cto.com/12778799/1958094

shell中字分隔的妙用:变量IFS相关推荐

  1. shell中文件路径用变量定义_环境变量

    环境变量可以使得 bash shell 存储有关 shell 会话和工作环境的信息,允许在内存中存储数据. 在 bash shell 中,环境变量分为: 全局变量 局部变量 全局变量对 shell 会 ...

  2. shell编程(三) : [Linux基础] Linux 环境变量

    接上一篇文章Linux shell编程(二): Linux shell基础 2.3 Linux环境变量 bash shell用一个叫作环境变量(environment variable)的特性来存储有 ...

  3. 在shell中常用的特殊符号

    在shell中常用的特殊符号罗列如下: # ;   ;; . , / \\ 'string'| !   $   ${}   $? $$   $* \"string\"* **   ...

  4. shell实例第22讲:shell中分隔符IFS用法

    shell中分隔符IFS用法 1.什么是IFS? IFS在shell中是分隔符的意思,即IFS这个变量中存放了分隔符. 2.IFS是全局变量还是局部变量? (1)linux中变量分两种:全局变量env ...

  5. 【CentOS 7Shell编程4】,shell中的case判断#180208

    2019独角兽企业重金招聘Python工程师标准>>> hellopasswd shell中的case判断 格式case 变量名in value1) command ;; value ...

  6. shell 中的export作用(转载)

    接触BASH的export是将自定义变量变成系统环境变量):我在一个脚本文件中定义一个了变量,然后echo显示出它的值,可结果却不是这样,脚本执行完后用source+脚本文件就可以了,我试了一下果然可 ...

  7. linux if 判断文件,shell中的逻辑判断,if 判断文件、目录属性,if判断的一些特殊用法...

    格式1:if 条件 ; then 语句; fi //如果满足条件,然后执行语句 [root@akuilinux01 shell]# cat if1.sh #!/bin/bash a=5 if [ $a ...

  8. shell中 的 export命令

    export 功能说明:设置或显示环境变量. 语 法:export [-fnp][变量名称]=[变量设置值] 补充说明:在shell中执行程序时,shell会提供一组环境变量.export可新增,修改 ...

  9. shell中$的作用

    shell中使用$符号来取一个变量的值,常见的就是$VAR或者${VAR},为了搞懂其它$#,$@,$0,$1,$2,$*,$$,$?的意义,我们可以写一个测试脚本运行下: #! /bin/bashV ...

最新文章

  1. IC/FPGA笔试/面试题分析(九)关于FIFO最小深度计算的问题
  2. ubuntu16.04右键没有终端的问题
  3. 3D打印材料PLA,ABS对比
  4. 2013-3-14 生活日记
  5. C++未定义行为-数组越界
  6. 监督学习 | SVM 之非线性支持向量机原理
  7. Centos7默认自带了Python2.7版本,但是因为项目需要使用Python3.x,这里提供一种比较快捷方便的安装方式...
  8. 车牌识别算法介绍与实践(转)
  9. 第四周课程总结实验报告二
  10. java包装类collection,java包装类的比较、hash和CollectionUtils交集原理探究
  11. 【Codeforces gym 102388】SUFE ICPC Team Formation Test,签到题BDG
  12. Python数据挖掘-关键字提取
  13. mysql对本地文件的读取_MySQL之文件读取
  14. C - Catch That Cow POJ - 3278(广搜)
  15. 清楚理解const_cast类型转换
  16. 数据分析之A股市场技术分析是否可行
  17. jmp连mysql_mongo connect BI 连接至Power BI
  18. 微信表白神秘代码!快发给ta!
  19. Arcgis用矢量文件裁剪栅格图像
  20. java咖啡是研磨的吗_咖啡的研磨程度,真的很重要吗?

热门文章

  1. java protected关键字_Java 权限protected关键字纠正
  2. delphi打印html文件路径,Delphi获取文件名、不带扩展名文件名、文件所在路径、上级文件夹路径的方法...
  3. 同一个网络中为什么有些计算机可以连接共享打印机,有些需要输入密码,安装局域网共享打印机时,要求输入用户和密码,但对方并没有设置,为什么?谢谢!!...
  4. Java常用API例子_Java常用API及Math类
  5. GPU Gems1 - 11 阴影贴图反走样
  6. ZOJ 3735 Josephina and RPG
  7. Servlet 与 Ajax 交互一直报status=parsererror
  8. JAVA-容器(2)-Collection
  9. Oracle 数据库字典 sys.obj$ 表中关于type#的解释
  10. 大话设计模式之策略模式