在linux中IFS是分隔符的意思,linux中变量分两种,全局变量env和局部变量set,set中包含了env的全部变量,我们查看IFS的值发现env | grep IFS为空,而set | grep IFS有值,说明IFS是局部变量,

gl@gl:~$ set | grep ^IFS
IFS=$' \t\n'

从上面可以看出,IFS是已空格、制表符、换行符来进行分隔的。

脚本1:

#!/bin/bash
IFS=","
str="a,b,c,d,e,f,g"
echo $str
for i in $str
doecho $i
done
运行结果:
gl@gl:~$ ./tmp
a b c d e f g
a
b
c
d
e
f
g

对于非特殊的分隔符,以下三种是等价的

IFS=","
IFS=$","
IFS=$','

介绍  IFS 、$ 、单双引号

IFS默认值是空格、制表符和换行符,此处以换行符\n来讨论,IFS='\n',IFS=$"\n",IFS=$'\n',第一个和第二个是等价的,就是普通字符反斜杠和n,第三个是一个先转换为了回车符NL,在屏幕上直接就回车了。

对于特殊字符


gl@gl:~$ echo "\n"
\n
gl@gl:~$ echo $"\n"
\n
gl@gl:~$ echo $'\n'gl@gl:~$ 

脚本2:

gl@gl:~/gl/shell/input$ cat text
#!/bin/bash
IFS="\n"
#IFS=$"\n"
#IFS=$'\n'
str="a\nb\nc\nd\\n"
echo $str
for i in $str
doecho  $i
done
echo "===================="
str2="anbncndn"
echo $str2
for j in $str2
doecho $j
done
结果是:
gl@gl:~$ ./text
a  b  c  d
abcd====================
a b c d
a
b
c
d
调试为:
gl@gl:~$ bash -x text
+ IFS='\n'
+ str='a\nb\nc\nd\n'
+ echo a '' b '' c '' d ''
a  b  c  d
+ for i in $str
+ echo a
a
+ for i in $str
+ echo+ for i in $str
+ echo b
b
+ for i in $str
+ echo+ for i in $str
+ echo c
c
+ for i in $str
+ echo+ for i in $str
+ echo d
d
+ for i in $str
+ echo+ echo ====================
====================
+ str2=anbncndn
+ echo a b c d
a b c d
+ for j in $str2
+ echo a
a
+ for j in $str2
+ echo b
b
+ for j in $str2
+ echo c
c
+ for j in $str2
+ echo d
d

脚本3:

#!/bin/bash
#IFS="\n"
IFS=$"\n"
#IFS=$'\n'
str="a\nb\nc\nd\\n"
echo $str
for i in $str
doecho  $i
done
echo "===================="
str2="anbncndn"
echo $str2
for j in $str2
doecho $j
done
结果是:
gl@gl:~$ ./text
a  b  c  d
abcd====================
a b c d
a
b
c
d
调试为:
gl@gl:~$ bash -x ./text
+ IFS='\n'
+ str='a\nb\nc\nd\n'
+ echo a '' b '' c '' d ''
a  b  c  d
+ for i in $str
+ echo a
a
+ for i in $str
+ echo+ for i in $str
+ echo b
b
+ for i in $str
+ echo+ for i in $str
+ echo c
c
+ for i in $str
+ echo+ for i in $str
+ echo d
d
+ for i in $str
+ echo+ echo ====================
====================
+ str2=anbncndn
+ echo a b c d
a b c d
+ for j in $str2
+ echo a
a
+ for j in $str2
+ echo b
b
+ for j in $str2
+ echo c
c
+ for j in $str2
+ echo d
d

脚本4:

#!/bin/bash
#IFS="\n"
#IFS=$"\n"
IFS=$'\n'
str="a\nb\nc\nd\n"
echo $str
for i in $str
doecho  $i
done
echo "===================="
str2="anbncndn"
echo $str2
for j in $str2
doecho $j
done
结果是:
gl@gl:~$ ./text
a\nb\nc\nd\n
a\nb\nc\nd\n
====================
anbncndn
anbncndn
调试为:
gl@gl:~$ bash -x ./text
+ IFS='
'
+ str='a\nb\nc\nd\n'
+ echo 'a\nb\nc\nd\n'
a\nb\nc\nd\n
+ for i in $str
+ echo 'a\nb\nc\nd\n'
a\nb\nc\nd\n
+ echo ====================
====================
+ str2=anbncndn
+ echo anbncndn
anbncndn
+ for j in $str2
+ echo anbncndn
anbncndn

脚本5:

#!/bin/bash
IFS="&"
str="a&&b&&c&&d"
echo $str
for i in $str
doecho $i
done
结果是:
gl@gl:~$ ./text2
a  b  c  d
abcd
调试为:
gl@gl:~$ bash -x ./text2
+ IFS='&'
+ str='a&&b&&c&&d'
+ echo a '' b '' c '' d
a  b  c  d
+ for i in $str
+ echo a
a
+ for i in $str
+ echo+ for i in $str
+ echo b
b
+ for i in $str
+ echo+ for i in $str
+ echo c
c
+ for i in $str
+ echo+ for i in $str
+ echo d
d

脚本6:

#!/bin/bash
IFS=$' '
str="a  b  c  d"
echo $str
for i in $str
doecho $i
done
结果是:
gl@gl:~$ ./text3
a b c d
a
b
c
d
调试为:
gl@gl:~$ bash -x ./text3
+ IFS=' '
+ str='a  b  c  d'
+ echo a b c d
a b c d
+ for i in $str
+ echo a
a
+ for i in $str
+ echo b
b
+ for i in $str
+ echo c
c
+ for i in $str
+ echo d
d

脚本7:

#!/bin/bash
IFS="\n"
#IFS=$"\n"
#IFS=$'\n'
str="ab
d"
echo $str
for i in $str
doecho $i
done
结果是:
gl@gl:~$ ./text4
ab
d
ab
d
调试为:
gl@gl:~$ bash -x ./text4
+ IFS='\n'
+ str='ab
d'
+ echo 'ab
d'
ab
d
+ for i in $str
+ echo 'ab
d'
ab
d

脚本8:

#!/bin/bash
#IFS="\n"
IFS=$"\n"
#IFS=$'\n'
str="ab
d"
echo $str
for i in $str
doecho $i
done
结果是:
gl@gl:~$ ./text4
ab
d
ab
d
调试为:
gl@gl:~$ bash -x ./text4
+ IFS='\n'
+ str='ab
d'
+ echo 'ab
d'
ab
d
+ for i in $str
+ echo 'ab
d'
ab
d

脚本9:

#!/bin/bash
#IFS="\n"
#IFS=$"\n"
IFS=$'\n'
str="ab
d"
echo $str
for i in $str
doecho $i
done
结果是:
gl@gl:~$ ./text4
ab d
ab
d
调试为:
gl@gl:~$ bash -x ./text4
+ IFS='
'
+ str='ab
d'
+ echo ab d
ab d
+ for i in $str
+ echo ab
ab
+ for i in $str
+ echo d
d
总结:

1. IFS="\n"和IFS=$"\n"等价,都是以反斜杠\ 和 英文字母n为分隔符,IFS=$'\n'则是以转化后的换行(即为按住Enter键的效果)为分隔符

2.出现多个空格并列为一个空格,多个除空格外的换行符并列出现时,如IFS="\n";str1="a\nb\nc" 或 IFS="&";str2="a&&b&&c" ,此时换行符\和字母n都作为str1的分隔符,&作为str2的换行符,则连续的两个换行符中间会出现一个空字符'',如上面脚本示例中的调试代码中出现的 ''

3. IFS="\n"和IFS=$"\n"都是表示反斜杠\ 和 英文字母n为分隔符,和按住Enter键的效果不是一回事,IFS=$'\n'表示按住Enter键的效果

linux中分隔符IFS相关推荐

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

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

  2. linux文本分割符怎么显示,Linux自定义分隔符IFS引发的文本处理问题

    需求是检查指定应用的某些配置所以就写了个脚本,数据文件的内容是这样的:应用名称|IP|端口    多个IP用空格,这样可以生成数组.这个文件的数据是通过部署平台的API获取后自己组装的. #!/bin ...

  3. notepad++ 分隔符SOH,在Linux中具体的对应字符

    从linux终端下载的文件用notePad++打开时看到的SOH分隔符,具体如下 有些网友说用\001可作为对应的Linux的分隔符,但是试了很多次不行. 当具体在linux中看了文件,发现其中的分隔 ...

  4. linux中read函数的用法,Linux中read命令的简介及使用方法

    Linux中read命令的简介及使用方法 发布时间:2020-08-17 16:40:04 来源:亿速云 阅读:107 作者:小新 这篇文章给大家分享的是有关Linux中read命令的简介及使用方法的 ...

  5. linux中seq命令用法

    用于产生从某个数到另外一个数之间的所有整数 例一: # seq 1 10 结果是1 2 3 4 5 6 7 8 9 10 例二: #!/bin/bash for i in `seq 1 10`; do ...

  6. Linux中_Ubuntu上_使用命令总结整理_02

    文章目录 目录: 1.操作系统操作 1.Linux 基础 2.系统信息 3.系统负载 -- top 4.程序开机自启动服务配置 5.重定向_管道_流 6.终端其他命令 2.文件与目录操作 1.文件和目 ...

  7. linux中的for命令

    bash shell提供了for命令,用于创建通过一系列值重复的循环.每次重复使用系列中的一个值执行一个定义的命令集. for命令基本格式为: for var in list do commands ...

  8. Linux中常见shell命令总结

    1.具体的shell命令用法可以通过help或man命令进入手册来查询其具体的用法. 2.终端本质上对应着linux上的/dev/tty设备,linux的多用户登录就是通过不同的/dev/tty设备完 ...

  9. Linux中的简单文本处理

    文本处理命令 tr命令(可以用来删除一段文本信息中的某些文字,或者将其进行转换) 格式: tr [option] - SET1 [SET2] 可选参数: -d: 删除和set1匹配的字符 -s:去除s ...

最新文章

  1. 什么是防火墙,真正意义上的防火墙
  2. JavaScript 对象中this的指向问题
  3. qfile 计算文件有多少行_肉牛不喂精料行吗?如何计算肉牛一天喂多少精料?
  4. 2 -13 作业需求
  5. Android 系统(228)---NITZ网络自动对时功能不起作用
  6. Android 系统(222)---Android 的lowmemorykiller机制
  7. JVM学习-类文件结构
  8. 查询、新增、修改、删除方法
  9. Linux电源管理-wakeup events framework
  10. 天线的布局、基本术语、种类、隔离度设计要求介绍
  11. 系统分析与设计-(二)系统规划
  12. 10月14号 - 15号 上海 IDC DX 大会
  13. 基于物理流体模拟(PFSPH和DFSPH)
  14. linux下国产达梦数据库的命令行安装
  15. 京东返利PHP采集关键字,PHP实现京东API的授权HASH算法
  16. 54、记录yolov7 训练、部署ncnn、部署mnn、部署rk3399 npu、部署openvino、部署oak vpu、部署TensorRT
  17. 快速生产地图瓦片解决方案:多任务切图
  18. 计算机怎样将多行文字转换成表格,怎么把表格里的字变成两行
  19. 智慧停车怎么实现的,停车场寻车是怎么实现的
  20. ffmpeg delogo滤镜去除图片水印

热门文章

  1. 示例程序009--阙值化(二值化,cvThreshold)
  2. 沐风老师ATilesPro for 3dMax屋顶设计插件使用教程
  3. 机械臂速成小指南(六):步进电机驱动器
  4. 头条校招(今日头条2017秋招真题)
  5. JAVA编写PTA(10分)
  6. Mysql免安装版win精简教程
  7. 《黑匣子思维:我们如何更理性地犯错》iphone部分
  8. React —— Descriptions(根据自己需求判断要显示哪些)
  9. recovery之刷机脚本自定义(解决刷zip文件时出现Status 6错误)
  10. 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。