使用重定向到Herestring的新行处理输出命令

我正在处理while循环,以处理 Herestring 输入:

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()输出键值行:

k1=some stuff
k2=other stuff
k3=remaining stuff

问题,命令替换 $()捕获标准输出,但用空格替换行尾,导致k1条目为{{1} }。

是否可以防止替换或恢复行尾?


注意:我通过以下方式解决了问题:

some stuff k2=other stuff k3= remaining stuff

但是我认为原始问题仍然有意义(保留或恢复行尾)。

visionhansome 回答:使用重定向到Herestring的新行处理输出命令

bash shell中实现 命令替换的方法。由于Shell会默认进行单词拆分,因此$(..)的无引号形式会删除所有嵌入的换行符。 IFS的默认值为$' \t\n',并且不加引号的扩展会导致基于这三个字符中的任何一个进行拆分。

您需要引用替代词以防止单词分裂。从GNU bash man page或通过设置IFS=""来重置扩展前的IFS值。

  

$(command)

     

Bash通过在子shell环境中执行command并用命令的标准输出替换命令替换来执行扩展,并删除所有尾随的换行符。嵌入的换行符不会被删除,但是可以被删除 during word splitting

本文链接:https://www.f2er.com/3158388.html

大家都在问