IFS

详解shell IFS分隔符 参考书籍:《Linux Shell核心编程指南》 概念 IFS(Internal Filed Separator,内部域分隔符)是一个set变量(shell变量),默认是空格、Tab键、换行符,使用for循环读取值列表时,会根据IFS的值判断列表中值的个数。 IFS的多个值之间是“或”的关系 查看IFS的值 直接使用echo "$IFS"发现输出两个空行 这是因为空格、Tab键、换行符都属于ASCII码表中的控制字符,是不可显示的内容,所有通过echo查看不到,需要通过od命令将数据转换为八进制后查看 由 阅读详情

STRING1="111 222 333 444"

echo $STRING1

echo "$STRING1"

这组代码没什么好说的,输出的是:111 222 333 444,它的作用是和下面那段做对比!!

STRING2="111 222  333   444"

echo $STRING2

echo "$STRING2"

输出的结果是

111 222 333 444

111 222  333   444

为什么?? 第一个输出的结果明显不对,难道输出了的是STRING1的值,明显不可能,这就是IFS的鬼伎俩。。。

首先介绍一下这个家伙,IFS是shell内定的一个变量,默认定义的值为 <space> <tab> <newline>3个,不好意思,这3个值我打出来也看不见,只能写英文。那IFS的作用是什么了,它的作用就是把字符串里的某某字符(和它一样的字符,例如上面的<space> <tab> <newline>)转义成分隔符

例如"111 222  333   444",这个字符串其实就是 111<space>222<space><space>333<space><space><space>444,由于IFS里也有个<space>,所以在它眼中<space>就是分隔符,所以"111 222  333   444"在它看来就是这个鬼样子111<分隔符>222<分隔符><分隔符>333<分隔符>< 分隔符><分隔符>444,由于分隔符(不是所有的分隔符都会合并,空格是个例外)进行合并,所以就成了111<分隔符>222<分隔符>333<分隔符>444,而这该死的<分隔符>偏偏显示出来和一个空格是一样的(或者说空格被用来表示分隔符),所以显示出来就变成了"111 222 333 444"怎么样? 郁闷吧

所以 echo $STRING2 显示出来的是"111 222 333 444",echo "$STRING2"之所以还是保持原样是因为""它屏蔽了IFS的功能,才未遭其迫害!!

如果我这样改下,结果就一样了,这时候shell就不会认为空格是分隔符了,倒是&符号要倒霉了 呵呵。。。

IFS='&'

STRING2="111 222  333   444"

echo $STRING2

echo "$STRING2"

另外还有个$*的全局变量,它和IFS狼狈为奸,尽干坏事,今天也揭下老底!!

$*指的是脚本入口参数的字符串集,说也说不清楚,举个例子

你在终端输入一个脚本,带了3个参数,这样

./script 111 222 333

那么 echo $*输出的就是111 222 333,这没什么问题,但是下面的东西就又忽悠人了

首先是这段代码

IFS='&'

STRING2="111&222&&333&&&444"

echo $STRING2

echo "$STRING2"

这输出的是

111  222  333   444

111&222&&333&&&444

经过上面的解释,这个忽悠不到人-----因为IFS='&',所以字符串里的&全成了分隔符,所以第一个输出的是111 222 333 444,后面还有一组代码

现在终端运行./script 111 222  333   444

IFS='&'

echo $*

echo "$*"

输出的是

111 222 333 444

111&222&333&444

我来解释一下是为什么

因为$*等于111IFS222IFS333IFS444,亦等于111&222&333&444,由于echo $*时,&代表分隔符,所以要转换成空格 ,而第二行由于""的作用使得&没有进行转换

IFS客户化开发流程 说明:本篇文章是在同事的指导下,由我整理的,我刚天始接触IFS的客户化开发,不正确之处敬请谅解Step1:建立rose模型所用工具:Rational Rose4.0基本步骤:1.        建立类图2.        设置类间关系注意事项1.        类图放在包中2.        如果是主外鍵的关系,关系选择By reference,如果是值列表,关 阅读详情

相关推荐

IFS认证辅导,国际食品企业认证BRC和IFS起源和发展

在国际零售商公信力最强的四个标准中,BRC标准和IFS标准与其他标准相比全面涵盖了零售商对产品的质量要求,广泛的被世界零售商所接受,进行BRC和IFS认证的商品更能够取得欧美进口国的信任和青睐。 文章首先阐述了BRC和IFS认证的基本内涵和起源,接着分析了BRC和IFS认证的区别,以及在中国的发展态势,并且阐述了中国国内食品出口企业的认证情况,指出了中国企业面对BRC和IFS认证的困境所在,最后给出了相应的对策。 认证作为企业提高管理水平,确保产品质量,扩大其产品市场份额的有效手段,在近几年得到了厂大出

kendaxin118的博客 1631

Shell中的IFS解惑

一、IFS 介绍      Shell 脚本中有个变量叫 IFS(Internal Field Seprator) ,内部域分隔符。完整定义是The shell uses the value stored in IFS, which is the space, tab, and newline characters by default, to delimit words for the r

Simple life 7万+

IFS Applications软件二次开发:IFS二次开发性能优化与监控

在IFS Applications软件的二次开发中,性能监控是确保系统高效运行的关键。IFS提供了多种内置工具,帮助开发者监控和优化应用程序性能。:这是一个强大的工具,用于监控IFS Applications的性能。它能够收集和分析系统运行时的性能数据,包括CPU使用率、内存使用、数据库查询时间等,帮助开发者识别性能瓶颈。IFS Trace:用于跟踪应用程序的执行流程,收集详细的运行时信息,如函数调用、执行时间等,对调试复杂问题非常有帮助。

kkchenjj的博客 3497

【Linux】IFS是个什么鬼

一、IFS引入         IFS(Internal Field Seprator),即内部域分隔符,完整定义是“The shell uses the value stored in IFS, which is the space, tab, and newline characters by default, to delimit words for the read and set co

厚积薄发者,轻舟万重山 8615

Linux Bash 脚本中的 IFS 是什么?

在 Bash 脚本中,IFS 是一个关键概念,它代表了 “Internal Field Separator”,即内部字段分隔符。这个字段分隔符定义了 Bash shell 在解析文本时所使用的分隔符。在处理文本数据时,Bash 将文本分割成多个字段,这些字段之间由 IFS 指定的字符进行分隔。在默认情况下,IFS 包含空格、制表符和换行符。这意味着 Bash shell 会将文本中的这些字符作为分隔符来分割字段。但是,可以根据需要修改 IFS 的值,以更改字段分隔符,使其适应不同的文本格式和需求。

网络技术联盟站 1533

聚类教程:cisTopic——来自单细胞表观基因组学数据的顺式调控主题的概率建模

之前运行这步的时候报错了如下: 后来发现原因是Ubuntu自动把R包更新到4.2版本,但是Rstudio版本没有更新,更新Rstudio即可,更新Rstudio的教程看此教程:。

watermel__的博客 1052

shell IFS

1. 介绍 IFS的默认值为:空白(包括:空格,tab, 和新行),将其ASSII码用十六进制打印出来就是:20 09 0a (见下面的shell脚本)。 IFS对空格的空白的处理和其他字符不一样,左右两边的纯空白会被忽略,多个连续的空白被当成一个IFS处理。 S*中使用IFS中的第一个字符。 awk中的FS(域分隔符)也和IFS有类似的用法和作用。 我写了一个shell脚本来演示IFS的用法和作用,如下: [hjq@localhost test]$ IFS='' [hjq@localhost tes

爱死亡机器人 2783

红日-VulnStack靶场-ATT&CK(二):从Weblogic漏洞到域控渗透实战

本文详细解析了红日安全团队VulnStack靶场中从Weblogic漏洞到域控渗透的完整攻击链。通过实战演示Weblogic反序列化漏洞利用、Cobalt Strike持久化控制、域内信息收集及PsExec横向移动等关键技术,复现了企业内网渗透的典型场景,并提供了防御建议。

tgb3456789的博客 937

excel公式IFS怎么用

IFS

xxy_yinji的博客 1322

触摸开关原理图_反激式开关电源PCB设计要点

由于最近工作中经常用到反激开关电源,就顺便做个有关反激电源PCB Layout方面的简单总结。关于变压器和补偿环路的设计原理和方法,可以参考之前的文章,链接如下:电子小白菜:反激电源变压器设计篇之详细设计步骤​zhuanlan.zhihu.com电子小白菜:反激电源变压器设计篇之基础原理​zhuanlan.zhihu.com电子小白菜:【干货分享】开关电源环路补偿设计步骤讲解​zhuanlan.z...

weixin_39574868的博客 1168

在天问block环境下LU-ASR01与51单片机的基础运用

正确步骤将模块和电脑连接后,仍然显示未连接(如4.1中图片中的编译下载后面显示未连接),可以尝试关闭软件后尝试,如果仍然不行换一条type-c线再试;以上方式都不行,可能要怀疑ASR01硬件损坏,跟商家联系!!!

BUG7073的博客 1万+

shell-IFS

摘要: Shell 中与 IFS(内部字段分隔符) 相关的变量和设置共同影响文本分割逻辑,主要分为三类: 直接关联变量:如 $*(用 IFS 连接参数)和 $@(参数独立),以及 Bash 特有的 COMP_WORDBREAKS(控制命令补全分割)。 间接影响变量:如 LC_CTYPE 等区域设置,决定 IFS 对空白字符的识别。 命令选项:如 read -d(指定行分隔符)和 mapfile -t(按行读取文件),与 IFS 配合使用。用户常通过自定义变量(如 old_ifs)保存 IFS 状态。 关键点

悟空看八戒烤熟了没的专栏c)4Upqt4SeVk 1121

电路板保险丝如何选型

在电路板保险丝选型过程中,需要考虑多个因素以确保其适合特定的电路需求。最后,经过以上程序选定的样品需要在实际的电路中进行测试,以验证所选择的保险丝是否合适。

weixin_57010826的博客 1311

Shell 脚本中IFS分隔符

Shell脚本中的IFS(内部字段分隔符)变量控制字符串的分割逻辑,默认包含空格、制表符和换行符。它主要影响for循环的字段分割、read命令的输入处理以及字符串赋值的修剪行为。通过临时修改IFS可实现特定分割需求,设为空字符串则可保留首尾空格。使用中需注意双引号会抑制分割,子Shell中的修改不影响父Shell。合理运用IFS能有效处理文本分割任务,但需避免常见误区。

悟空看八戒烤熟了没的专栏c)4Upqt4SeVk 1179

【AI智能体】Dify集成 Echarts实现数据报表展示实战详解

Dify集成 Echarts 实现智能数据报表集成与展示实战详解

congge 5962

1小时读完100篇文献的正确打开方式

各位同仁好,我是七哥。一个在高校里从事人工智能 相关领域研究,钻研用大模型AI实操的学术人。可以和七哥交流学术写作或Gemini、GPT、Claude 等大模型 学术实操相关问题,多多交流,相互成就,共同进步。文献阅读与整理一般都是最先开始、却也最容易被低估的一步。很多学术同仁一开始就陷入越读越多、越读越乱的状态:论文下载了一大堆,但真正能用来支撑自己观点的内容却始终难以提炼出来。一方面,我们需要通过文献了解该研究领域的整体发展脉络,把握当前学界已经讨论到什么程度;

智能AI让学术科研更容易 50

Shell中的IFS

IFS是shell的内置变量,IFS是一个字符串,里面的每一个字符都会用来作为分隔符进行单词分割。 IFS变量只在当前shell起作用。 一、对$*的影响 先做参数替换把$*替换成参数列表。相当于args[] 然后下面分两种情况: (1)当$*不在双引号里面时,要做单词分割,把args的每个元素继续按IFS分割成多个单词,比如$1可能分成两个单词,$2可能分成三个单词 (2)当$*在双引号里面时,跳过单词分割,直接把args每个元素以IFS每一个字符连接成单个单词,即"$1c$2c$3"。c是IFS每一个

void的博客 5177

k8s篇之underlay网络和overlay区别

underlay和overlay

小橙子的笔记屋 2144

IFS 客户端 开发学习笔记4

以下都来自于 Foundation 1.3 Developer’s Guide 的阅读笔记  Foundation 1 Components IFS/Design支持使用 Rational Rose 进行建模,同时创建业务逻辑层,以及oracle对象的数据存储层。

星闪空冥的专栏 1463

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Korn Shell中IFS的妙用

<br />IFS是internal field separator的缩写,shell的特殊环境变量。ksh根据IFS存储的值,可以是空格、tab、换行符或者其他自定义符号,来解析输入和输出的变量值。<br /> <br />如果有一IP地址220.112.253.111, 欲将这个IP地址颠倒顺序,你可以定义IFS为".",然后直接echo这个地址即可得到此IP的4个数值,然后c重新把IFS设为空格,重新组合四个IP地址的数值即可。<br /># The following code segment wi

Bo Yang's Blog 3263

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

不可不知的shell中的IFS

Linux下有一个特殊的环境变量叫做IFS,叫做内部字段分隔符(internal field separator)。它可以决定项目列表或值的列表的分隔符,IFS的默认值为空格,Tab制表符或换行符。使用for循环读取项目的列表或直列表时,就会根据IFS的值判断列表中的个数,最终决定循环的次数。 默认情况下,bash shell会将下面的字符当做字段分隔符:空格、制表符、换行符。 ASCLL码表 IPFS的值是空格或Tab制表符 当我们在终端上使用echo命令输出IFS的值时,因为IFS的值是空格或Tab

chen1415886044的博客 2320

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

该死的IFS变量

不得不说shell里面的全局变量都是些恶心的家伙,特别是这家伙----IFS,恶心之极,差点被它忽悠过去了,所以赶快记录下来,以免下次再被忽悠!!! STRING1="111 222 333 444" echo $STRING1 echo "$STRING1" 这组代码没什么好说的,输出的是:111 222 333 444,它的作用是和下面那段做对比!! STRING2="111

sunjiangangok的博客 922

深入分析 Shell 中 IFS、数组赋值与输出行为

(Internal Field Separator)是一个至关重要的环境变量,它用于定义字符串或数组在分隔时使用的字符。后,它会影响数组的赋值、命令替换以及数组元素的输出,可能会导致一些意外的行为。被修改时,它会直接影响数组的构造方式,尤其是在命令替换和数组赋值时。的输出本身没有逗号,Shell 会将整个输出视为一个单一的字符串赋给数组。对数组赋值与输出的影响,尤其是在命令替换、数组赋值、输出过程中如何通过合理配置。它的默认值包括空格(时,Shell 默认使用空格作为数组元素的分隔符,而不是逗号。

vortex5的博客 1722

Shell IFS变量

IFS文档 IFS (Internal Field Separator)输入字段分隔符,Bash 会根据IFS 中定义的字符来进行字符串拆分。默认情况下,IFS包含空格,制表符tab和回车,这也是Bash 读取数据都是在空格处拆分的原因。 IFS变量通常用于读取命令、参数扩展和命令替换。 cat -A <<< "$IFS" ^I$ $ # " "是空格,^I$是Ta...

L, there! 831

IFS系统功能清单之六——IFS 企业资产管理(IFS/EAM)

<br />6 IFS 企业资产管理(IFS/EAM)<br /> 6.1 设备(Equipment)<br /> 6.1.1 逻辑设备(Functional Object)<br /> 6.1.1.1 概览 - 逻辑设备(Overview - Functional Objects)<br /> 6.1.1.2 逻辑设备信息(Functional Object Information)<br /> 6.1.1.3 转化逻辑设备(Convert Functional Object)<br /> 6

Edwin的专栏 4203
上一篇: 学习shell:case_1
下一篇: 有类查找和无类查找
proing
博客等级 码龄19年 2092粉丝 94原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值