首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >处理输出命令,并将新行重定向为Herestring

处理输出命令,并将新行重定向为Herestring
EN

Stack Overflow用户
提问于 2019-11-05 15:26:09
回答 1查看 31关注 0票数 0

我正在处理一个with循环处理一个输入:

代码语言:javascript
复制
one_is_achieved=0
while IFS="=" read key value ; do
  process_entry key value && one_is_achieved=1
done <<<$(output_entries)
# Dealing with one_is_achieved
[...]

函数output_entries()输出键值行:

代码语言:javascript
复制
k1=some stuff
k2=other stuff
k3=remaining stuff

问题是,命令 $()捕获了stdout,但用空格替换了行尾,导致k1条目为some stuff k2=other stuff k3= remaining stuff

是否有一种方法可以防止替换或还原(行尾)?

注意:,我用这种方式解决了我的问题:

代码语言:javascript
复制
while IFS="=" read key value ; do
  process_entry key value && one_is_achieved=1
done < <(output_entries)

但我认为最初的问题仍然是相关的(保留或恢复行尾)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-05 15:47:47

这就是在bash shell中实现命令替换的方式。$(..)以未引号的形式删除任何嵌入的换行符,这是因为shell进行了默认的分字操作。默认的IFS值是$' \t\n',未引用的扩展将导致基于这三个字符中的任意一个进行拆分。

你需要引用替代词来防止单词分裂的发生。在展开替换之前设置GNU bash手册页或重置IFS值。

$(command) Bash执行扩展的方法是在子subshell环境中执行command,并将命令替换为命令的标准输出,删除所有尾随的换行符。嵌入的换行符不会被删除,但它们可能被删除during word splitting.。

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

https://stackoverflow.com/questions/58714530

复制
相关文章

相似问题

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