首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >"$IFS“和$(回显”$IFS“)有什么区别?

"$IFS“和$(回显”$IFS“)有什么区别?
EN

Stack Overflow用户
提问于 2021-11-14 12:32:12
回答 1查看 66关注 0票数 0

我在两个表达式中使用了十六进制。有一个小的区别,我想更多地了解它,…

代码语言:javascript
复制
thierry@toto-PC:~> hexdump -C <<< "$IFS"
00000000  20 09 0a 0a                                       | ...|
00000004

代码语言:javascript
复制
thierry@toto-PC:~> hexdump -C <<< $(echo "$IFS")
00000000  20 09 0a                                          | ..|
00000003

我知道0a (行馈送)表示行尾。

我试着解释一下。

( Case_1) shell变量IFS包含每个默认的2090A0A。这意味着三个值:空白20、表格09和行提要0a。所有内容都是扩展的,但是由于双引用,在末尾追加了另一行提要0a。因此,第一个流是2090A0A,并被认为是这里字符串…的行。

( Case_2) $(echo "$IFS")。

只有回波"$IFS“生成2090A0A,它类似于Case_1或如下所示:

代码语言:javascript
复制
thierry@toto-PC:~> echo "$IFS" | hexdump -C
00000000  20 09 0a 0a                                       | ...|
00000004

然后,命令替换消除了该流末尾的第一个0a。为什么?命令替换查看IFS shell变量的值并查找0a。因此,命令替换将第一个0a (在20090A0A中)看作一个分隔符,但它的值与最后一个字符0a相同,因此消除了第一个0a。

最后,在Case_2中逻辑地读取:20.090A。

是对的吗?

注释:在这种情况下,的值在case_2中是假的,我的意思是这不是期望值。)我不认为这是个虫子。它工作得很好!)

EN

回答 1

Stack Overflow用户

发布于 2021-11-16 22:25:16

你的解释部分正确。shell变量IFS确实包含空格、选项卡、换行符(20.090A)。由于双引用,不是,而是在末尾追加了另一行提要0a,而是因为<<<,请参阅这里的Strings

结果以单个字符串的形式提供,并附加一个换行符到命令…。

的确,回声"$IFS“可以产生2090A0A。命令替换消除了这个流末尾的第一个0a (仅为),这不是真的,而是删除了任何尾随的换行符,参见命令替换。在此之后,<<<再次追加一个换行符。

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

https://stackoverflow.com/questions/69963009

复制
相关文章

相似问题

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