我正在处理一个with循环处理一个输入:
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问题是,命令 $()捕获了stdout,但用空格替换了行尾,导致k1条目为some stuff k2=other stuff k3= remaining stuff。
是否有一种方法可以防止替换或还原(行尾)?
注意:,我用这种方式解决了我的问题:
while IFS="=" read key value ; do
process_entry key value && one_is_achieved=1
done < <(output_entries)但我认为最初的问题仍然是相关的(保留或恢复行尾)。
发布于 2019-11-05 15:47:47
这就是在bash shell中实现命令替换的方式。$(..)以未引号的形式删除任何嵌入的换行符,这是因为shell进行了默认的分字操作。默认的IFS值是$' \t\n',未引用的扩展将导致基于这三个字符中的任意一个进行拆分。
你需要引用替代词来防止单词分裂的发生。在展开替换之前设置GNU bash手册页或重置IFS值。
$(command)Bash执行扩展的方法是在子subshell环境中执行command,并将命令替换为命令的标准输出,删除所有尾随的换行符。嵌入的换行符不会被删除,但它们可能被删除during word splitting.。
https://stackoverflow.com/questions/58714530
复制相似问题