首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IFS='‘或IFS=是什么意思?

IFS='‘或IFS=是什么意思?
EN

Stack Overflow用户
提问于 2021-10-09 21:38:32
回答 2查看 75关注 0票数 0

IFS用作分词字符,但当IFS为null/空时会发生什么情况。例如,考虑包含内容的输入文件abc.txt

代码语言:javascript
复制
first line
second line

现在,如果我运行

代码语言:javascript
复制
IFS='' # or IFS= or assume IFS is null
for word in $(cat abc.txt)
do
 echo ${word}
done

则输出为

代码语言:javascript
复制
first line
second line

请注意,在输出中,显示了两行。现在,问题是为什么会出现两行而不是一行?如果没有IFS用作分词字符,那么我猜输出应该是

代码语言:javascript
复制
first line second line

既然现在\n也不是IFS,那么输出不应该只在一行中吗?

EN

回答 2

Stack Overflow用户

发布于 2021-10-09 21:43:56

您设置了IFS,但设置为空值。

假设您使用的是POSIX兼容的shell,如果IFS为空,则按照IEEE标准1003.1,2004年(对POSIX.1-2001部分2.6.5 Field Splitting的次要更新如下所示:

如果IFS的值为空,则不进行字段拆分。

因此,您实际上不是在迭代各行,而只是在一次运行中打印所有内容。如果相关,请注意,取消设置IFS将具有非常不同的行为(使其行为如同填充了默认值、空格/制表符/换行符)。

票数 4
EN

Stack Overflow用户

发布于 2021-10-09 21:45:24

在循环的第一次迭代中,abc.txt的全部内容被分配给word,包括每行末尾的换行。这些换行符是echo参数的一部分,它将它们写入标准输出。

您的循环只执行一次,对echo的单个调用将写入从文件读取的两行代码。

(将declare -p word添加到循环体,以查看word在一次且唯一的迭代中的完整值。)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69510734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档