shell脚本IFS的概念

本文深入探讨了Shell中的IFS(内部字段分隔符)变量,它是如何影响命令替换和参数替换过程中的字符串拆分。IFS默认使用空格、制表符和换行符作为分隔符。通过设置IFS,可以改变这一行为。例如,使用' '作为IFS可以使shell按行处理数据。`while read`命令结合IFS,能够有效地逐行读取文件内容或处理管道输出。了解IFS的正确设置与使用,对于编写高效的Shell脚本至关重要。
摘要由CSDN通过智能技术生成

一,IFS的概念

Shell脚本中有个变量叫IFS(Internal Field Seprator),内部域分隔域。

Shell的环境变量分为set,env两种,其中set变量可以通过export工具导入到env变量中。

其中,set是显示设置shell变量,仅在本shell中有效;env是显示设置用户环境变量,仅在当前会话中有效。

换句话说,set变量里包含了env变量,但set变量不一定都是env变量。这两种变量不同之处在于变量的作用域不同。显然,env 变量的作用域要大些,它可以在 subshell 中使用。

IFS 是一种 set 变量,当 shell 处理"命令替换"和"参数替换"时,shell 根据 IFS 的值,默认是 space, tab, newline 来拆解读入的变量,然后对特殊字符进行处理,最后重新组合赋值给该变量

二,IFS查看

查看IFS的值发现env | grep IFS 为空,而set | grep IFS 有值,说明IFS是局部变量
IFS是以空格,制表符,换行符来进行分隔的

三,IFS实例操作一:设置分隔符

在这里插入图片描述
在这里插入图片描述

四,介绍IFS、$、单双引号

1,单双引号赋值给IFS的对比

这三个赋值看起来都比较像“将换行符赋值给IFS”,但实际上只有最后一种写法才是我想要的结果。
IFS=“\n” //将字符n作为IFS的换行符。
IFS= $“\n” //这里\n确实通过 $转化为了换行符,但仅当被解释时(或被执行时)才被转化为换行符;第一个和第二个是等价的
IFS= $’\n’ //这才是真正的换行符。

2,使用IFS=’\n’结果

在这里插入图片描述

3,使用IFS=$"\n"结果

在这里插入图片描述

五,while read的应用

1,用法一:格式

while read 变量名(line)
do

done <line
read通过输入重定向,把file的第一行所有的内容赋值给变量line,循环体内的命令一般包含对变量line的处理;
然后循环处理file的第二行、第三行…一直到file的最后一行。
read命令也有退出状态,当它从文件file中读到内容时,退出状态为0,循环继续;
当read从文件中读完最后一行后,下次便没有内容可读了,此时read的退出状态为非0,所以循环才会退出。 
 
在这里插入图片描述

2、用法二:格式

command | while read line
do

done
command的输出作为read的循环输入,这种结构常用于处理超过一行的输出,当然awk也很擅长。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值