IFS的概念和方法

  • 参考
  • IFS的概念
    • 查看IFS的默认值
    • 查看IFS的值对应的字符编码
  • IFS导致的非理想的分割例子
    • 取得理想结果

参考

https://www.cnblogs.com/guxd/p/15033470.html
https://blog.csdn.net/anqixiang/article/details/113360565
https://www.modb.pro/db/375945
https://www.cnblogs.com/liujunjun/p/12003894.html

IFS的概念

IFS(Internal Field Seprator) ,即内部域分隔符,实际上是一种区分元素边界的变量。bash下的很多命令都会分割单词,多数时候默认采用空格作为元素分隔符。
最典型的例子是"for i in a b c",它会分割变量列表"a b c"使其成为三个变量。这种分隔符是由IFS变量指定的。
而IFS是一种set变量,当shell处理"命令替换"和"参数替换"时,shell 根据IFS的值分割读入的变量。IFS的值是一个字符列表,默认是space,tab,newline。

查看IFS的默认值

如何查看本系统中IFS的值呢?

set | grep IFS


可以看到本系统的IFS默认值为空格、制表符(\t)和换行符(\n)。IFS的多个值之间是“或”的关系,即遇到空格或制表符或换行符就对文本进行分割。

查看IFS的值对应的字符编码

直接输出IFS是看不到它的值,需要把它转化为八进制字码。

# 直接查看IFS的值
echo $IFS# od指令会读取所给予的文件的内容,并将其内容以八进制字码呈现出来
#
printf "$IFS" | od -b


其中040代表空格键,011代表Tab键,012代表换行符

IFS导致的非理想的分割例子

有时候,由于IFS系统默认存在,导致了分割的元素,并不是我们真正想要的。比如在for循环中,我们需要处理一个文本文件,我们希望以一行为一个整体进行输出。正常实现时:

# 1.txt
i send you banana
you said you love apple
#############脚本
# 测试脚本
for word in `cat 1.txt`
doecho "word : $word"
done###################运行结果
word : i
word : send
word : you
.......

我们发现,在处理文本时,每个单词被当做了一个整体,而不是以一行为单位进行处理。这就在于默认的IFS值有(空格、制表符和换行),当shell命令遇到空格时,就会对文本进行分割。但如果要指定IFS为换行,那么命令只会在遇到换行符才对文本进行分割,此时才是我们想要的结果。

取得理想结果

那么我们该如何实现上面的需求呢?这里可以临时修改IFS的值,使for循环在遇到换行符时才会对文本进行分割即可。实现如下:

#############脚本
# 保存原来的IFS值
oldIFS=$IFS
# 指定IFS的值仅为换行符(\n),即只在遇到换行符时对文本进行分割
IFS=$'\n'
# 测试脚本
for word in `cat 1.txt`
doecho "word : $word"
done
# 实现目的之后把原本的IFS值复位
IFS=$oldIFS###################运行结果
word : i send you banana
word : you said you love apple

【shell脚本】——IFS的概念和用法相关推荐

  1. shell脚本IFS的概念

    一,IFS的概念 Shell脚本中有个变量叫IFS(Internal Field Seprator),内部域分隔域. Shell的环境变量分为set,env两种,其中set变量可以通过export工具 ...

  2. 69:shell脚本介绍 | shell脚本结构 | 执行data命令用法 | shell脚本中变量

    2019独角兽企业重金招聘Python工程师标准>>> 1.shell脚本介绍: shell是一种脚本语言和传统的开发语言相比,会比较简单: shell有自己语法,可以支持逻辑判断. ...

  3. Shell脚本中循环select命令用法笔记

    在Shell脚本中,select命令是一种菜单扩展的循环方式. 语法结构如下: select Menu in (list) do command done 说明:当程序运行到select语句时,会自动 ...

  4. Shell脚本中循环until命令用法笔记

    在shell脚本中,可以使用until执行循环处理,如果使用until命令的话如果表达式的结果为false时才执行循环体,直到测试表达式的值为true的时候才会 停止循环. 语法结果如下: until ...

  5. shell脚本、awk、sed用法

    shell sed awk 什么是shell 翻译官 内核与用户之间的解释器程序(/bin/bash) shell种类 配置文件:/etc/shells/bin/sh/bin/bash/sbin/no ...

  6. shell脚本if与read语句用法练习

    #位置参数变量: #my_shell.sh ubuntu($1) centos($2) linux($3) #引用方式:$1 $2 $3 #useradd $1 #useradd $2 #userad ...

  7. Shell脚本中函数位置参数的用法笔记

    位置参数主要是用于调用函数的时候有时候需要传递参数,有很大的比例都是需要调用函数的时候动态传递参数,从而实现相应的功能.比如我想要计算两个数的和,可以通过函数是实现,需要定义两个参数作为计算的值.这样 ...

  8. shell shift与{}_一文掌握shell脚本中shift的用法及功能

    概述 今天主要介绍下shell脚本中shift的一些用法,这个命令还是相对比较少见的. 一.shift介绍 shift命令用于对参数的移动(左移),通常用于在不知道传入参数个数的情况下依次遍历每个参数 ...

  9. Linux中shift命令的用法,一文掌握shell脚本中shift的用法及功能

    概述 今天主要介绍下shell脚本中shift的一些用法,这个命令还是相对比较少见的. 一.shift介绍 shift命令用于对参数的移动(左移),通常用于在不知道传入参数个数的情况下依次遍历每个参数 ...

最新文章

  1. 2021春季学期-创新设计与实践-Lesson1
  2. 程序员如何跟领导提离职_如何优雅地跟老板提加薪?按照这3个步骤来,也不是什么难事...
  3. python之获取微信服务器的ip地址
  4. sscanf的高级用法
  5. mongoose mysql_mongoose入门
  6. 把CS文件编译成dll文件
  7. ThinkPHP3.2.3完全开发手册离线手册
  8. HTTP状态码及对应原因
  9. Java观察者模式(Observer)
  10. Exposure X8 ps人像图片调色滤镜插件
  11. 遍历文件夹批量重命名
  12. 如何通过Python暴力破解网站登陆密码
  13. 在html中什么是锚点
  14. hp笔记本无线网服务器,惠普电脑连不上无线网该怎么办
  15. node php v2ex,一个仿V2EX的开源二次元论坛程序:Vmoex安装教程
  16. Muli3D 8 计算Shader中顶点属性相对于屏幕坐标的偏导数
  17. 平衡小车c语言程序,【全部开源】两轮平衡小车(原理图、PCB、程序源码、BOM等)...
  18. 《数据同步-NIFI系列》Nifi详细教程入门-01概念
  19. AV3680A天馈线测试仪使用方式
  20. 16路4-20mA转Modbus TCP网络数据采集模块 WJ89

热门文章

  1. 哪个选项不是python文件打开的合法模式组合_下面代码的输出结果是( ):
  2. Ellisys Bluetooth Vanguard - 软件
  3. Redis单线程瓶颈分析
  4. [VC] 冒号(:)与C/C++
  5. 网卡的功能、构造与分类 | 什么是网卡?
  6. 程序员都会的五大算法之三(贪心算法),恶补恶补恶补!!!
  7. BaaS_后端即服务 RESTful
  8. 开篇“给自己定一个目标,明年7月去实现。希望不是一时的兴起。”
  9. 小米手机android目录在哪里设置字体,在哪里修改小米手机的字体大小
  10. 1253寻找肇事司机