当前位置: 首页 > news >正文

shell中的IFS

shell中的IFS

变量IFS在shell中被用作输入字段分隔符(input field separator)或内部字段分隔符(internal field separator)。

本质上,它是一个由特殊字符组成的字符串,在分割行输入时用来作为单词/字段之间的分隔符。

IFS的默认值是空格(ASCII编码0x20)、制表符(ASCII编码0x09,一般表示为'\t')、换行符(ASCII编码为0x0A,一般表示为'\n')。

如果未设置IFS,其使用默认值。

如果IFS被设置为空字符串(这与未设置IFS不同),则不会进行切分。

#IFS使用默认值,正常进行分割
[root@k8s-node-4 sh_learn]# read -r a b c <<< 'the plain gold ring'
[root@k8s-node-4 sh_learn]# echo "<$a>"
<the>
[root@k8s-node-4 sh_learn]# echo "<$b>"
<plain>
[root@k8s-node-4 sh_learn]# echo "<$c>"
<gold ring>#为IFS设置空值,不进行切分
[root@k8s-node-4 sh_learn]# IFS= read -r a b c <<< 'the plain gold ring'
[root@k8s-node-4 sh_learn]# echo "<$a>"
<the plain gold ring>
[root@k8s-node-4 sh_learn]# echo "<$b>"
<>
[root@k8s-node-4 sh_learn]# echo "<$c>"
<>

此变量被用于多个不同地方,语义略有不同:

  • 在read命令中,如果指定了多个变量名称参数,IFS被用来分割输入行,使得每个变量都被赋予输入行中的单个字段值。(如果字段的数量比变量多,则最后一个变量被赋予所有剩余字段值)。

​ 注意:当将多余的字段赋予最后一个变量时,不会对剩余部分的字符串进行分割和空白压缩。

#下面的示例中,字段数量比变量多,会将剩余部分都赋值给最后一个变量c,但不进行分割和空白压缩。
[root@k8s-node-4 sh_learn]# IFS=$' \t\n' read -r a b c <<< 'the    plain gold      ring'
[root@k8s-node-4 sh_learn]# echo "<$a> <$b> <$c>"
<the> <plain> <gold      ring>#下面的示例中,2后面有3个冒号,第一个冒号被用来分割字段,所以变量c的值以两个冒号开始。
[root@k8s-node-4 sh_learn]# IFS=: read -r a b c <<< '1:2:::3::4'
[root@k8s-node-4 sh_learn]# echo "<$a> <$b> <$c>"
<1> <2> <::3::4>
  • 在read命令中,IFS中的任何空白字符,若出现在输入行的首尾位置,都将被删除,即使仅有一个变量。

    #在下面的示例中,字符串awd前后的空白字符都被删除,变量a的值是awd。
    [root@k8s-node-4 sh_learn]# read -r a <<< "  awd  "
    [root@k8s-node-4 sh_learn]# echo "<$a>"
    <awd>
    

在字段分割场景下,针对IFS中的空白字符时,有特殊的处理规则。字符串前后出现的IFS中的空白字符会被删除,字符串内部的连续空白字符会被当做单个分隔符。

#对IFS中空白字符的特殊处理。输入字符串以多个空格开始,字段之间也有多个空格。按照上述规则处理后,变量获取了正确的值。
[root@k8s-node-4 sh_learn]# IFS=$' \t\n' read -r one two three \
>    <<< '   1      2  3'
[root@k8s-node-4 sh_learn]# echo $one
1
[root@k8s-node-4 sh_learn]# echo $two
2
[root@k8s-node-4 sh_learn]# echo $three
3#针对非空白字符,不会被删除和压缩。可以看到,输入中两个连续的冒号都被当做分隔符,所以变量gecos的值是空的
[root@k8s-node-4 sh_learn]# IFS=: read -r user pwhash uid gid gecos home shell    <<< 'statd:x:105:65534::/var/lib/nfs:/bin/false'
[root@k8s-node-4 sh_learn]# echo "<$user>" "<$pwhash>" "<$uid>" "<$gid>" "<$gecos>" "<$home>" "<$shell>"                          
<statd> <x> <105> <65534> <> </var/lib/nfs> </bin/false>

如果IFS中同时包含空白字符和非空白字符,则处理方式如下:

  1. 任何非空白字符及该字符相邻的所有空白字符都被当做单个字段分隔符;
  2. 单个空白字符或非空白字符也会被当做字段分隔符;
#在下面的示例中,将IFS的值设置为空格和逗号,则单个空格(four和five之间),单个逗号(one和two之间),逗号以及相邻的所有空格(two和three之间,three和four之间),都被当做分隔符。
[root@k8s-node-4 sh_learn]# IFS=' ,'
[root@k8s-node-4 sh_learn]# var='one,two,  three ,  four five'
[root@k8s-node-4 sh_learn]# printf "<%s>\n" $var
<one>
<two>
<three>
<four>
<five>
http://www.sczhlp.com/news/46895/

相关文章:

  • 雷达传感器和红外传感器的区别
  • 零基础入门道德黑客技术指南
  • 做韩国网站有哪些东西吗网络推广的方法有
  • 网站站外优化怎么做吸引人的营销标题
  • 天津网站建设排名企业网络营销策划书
  • 深圳有没有做网站的推广普通话宣传语手抄报
  • 蓝色经典网站搜索网站哪个好
  • 快速关键字测试demo
  • 云上托举智造梦,天翼云为机械工业注入澎湃数字活力!
  • 【Markdown】关于Markdown文档转为HTML文件后,移动HTML文件后,图片不能正常显示的问题的解决办法
  • 【IEEE出版】 第五届机电一体化技术与航空航天工程国际学术会议(ICMTAE 2025)
  • wordpress图标居中跟我学seo
  • 渝中集团网站建设湖南有实力seo优化
  • 做网站版面制作网站
  • word链接点进去是网站怎么做桂林网页
  • 简单的旅游网站怎么做seo企业推广案例
  • 公司个人怎么制作网站网站建设小程序开发
  • 特产网站怎么做百度搜索引擎优化详解
  • 游戏外包公司要不要去seo流量是什么意思
  • 简述网站建设基本流程百度下载安装到桌面
  • 如何查看与解析邮件服务器日志
  • 【Springer出版】第五届现代教育技术与社会科学国际学术会议(ICMETSS 2025)
  • 温州网站开发定制太原互联网推广公司
  • 设计师服务平台台廊坊seo管理
  • 国内知名网站新网站seo
  • 免费网站建设 优帮云樱桃磁力bt天堂
  • 网站资讯建设网站技术制作
  • 上海的广告公司网站建设个人怎么做百度竞价
  • webpack 的构建流程是什么?
  • SNAP软件Sentinel-1双极化分解方法