如何将Bash的流程替换与HERE文档结合在一起?

蒂姆·弗里斯克

在Bash版本4.2.47(1)-发行版中,当我尝试对来自HERE-dcoument的格式化文本进行分类时,如下所示:

cat <(fmt --width=10 <<FOOBAR
(I want the surrounding parentheses to be part of the HERE-document)
(Even the preceding unbalanced parenthesis should be part of it.
FOOBAR
) # I want this paranthesis to end the process substitution.

我收到以下错误:

bash: bad substitution: no closing `)' in <(fmt --width=10 <<FOOBAR
(I want the surrounding parentheses to be part of the HERE-document)
(Even the preceding unbalanced parenthesis should be part of it.
FOOBAR
)

我也不想引用HERE文档,即write <'FOOBAR',因为我仍然想在其中替换变量。

你好

流程替代大致与此相同。

示例-流程替换机制

步骤#1-创建一个fifo,输出到它

$ mkfifo /var/tmp/fifo1
$ fmt --width=10 <<<"$(seq 10)" > /var/tmp/fifo1 &
[1] 5492

步骤#2-阅读FIFO

$ cat /var/tmp/fifo1
1 2 3 4
5 6 7 8
9 10
[1]+  Done                    fmt --width=10 <<< "$(seq 10)" > /var/tmp/fifo1

在HEREDOC中使用parens似乎也可以:

示例-仅使用FIFO

步骤#1-输出到FIFO

$ fmt --width=10 <<FOO > /var/tmp/fifo1 &
(one)
(two
FOO
[1] 10628

步骤#2-读取FIFO的内容

$ cat /var/tmp/fifo1
(one)
(two

我认为您遇到的麻烦是,流程替换(<(...))似乎并不关心内部的嵌套。

示例-进程子+ HEREDOC不起作用

$ cat <(fmt --width=10 <<FOO
(one)
(two
FOO
)
bash: bad substitution: no closing `)' in <(fmt --width=10 <<FOO
(one)
(two
FOO
)
$

逃避父母的抚慰似乎有些安抚:

示例-转义括号

$ cat <(fmt --width=10 <<FOO                 
\(one\)
\(two
FOO
)
\(one\)
\(two

但是并没有真正给你想要的东西。使括号保持平衡似乎也令人安心:

示例-平衡括号

$ cat <(fmt --width=10 <<FOO
(one)
(two)
FOO
)
(one)
(two)

每当我有复杂的字符串(例如在Bash中要使用的字符串)时,我几乎总是会首先构造它们,将它们存储在变量中,然后通过变量使用它们,而不是尝试制作一些棘手的内衬,最终导致脆弱的。

示例-使用变量

$ var=$(fmt --width=10 <<FOO
(one)
(two
FOO
)

然后打印:

$ echo "$var"
(one)
(two

参考

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将python asyncio与线程结合在一起?

如何将PrettyPrintingJsonGeneratorDecorator和MaskingJsonGeneratorDecorator结合在一起?

如何将原位转换和复制转换结合在一起?

如何将“最终形式计算”与“最终形式数组”结合在一起

如何将back_inserter与转换结合在一起,C ++

如何将输入与字符串结合在一起?

如何将聚合查询与不同联接结合在一起?

如何将EventEmitter与动态组件结合在一起?

如何将.toggleClass()与.appendTo()结合在一起?

如何将Axios调用循环与等待功能结合在一起?

如何将两个下一个结合在一起

如何将这两个查询结合在一起?(MySQL)

如何将两个数据框与R中的项目数量结合在一起?

如何将RequireJS路径和require-css结合在一起?

如何将数据框总结为与ID结合在一起的列表?

将吸气剂结合在一起

如何将DataTables与其他匹配器结合在一起?

R:如何将几个数据集结合在一起

如何将NavigationDrawerPageSlidingTabStrip与StickyListHeaders库结合在一起?

如何将typedef的结构与实例创建结合在一起?

如何将列与R中的条件结合在一起?

如何将“ IF FOR批处理”与“ FOR DELIMS批处理”结合在一起?

如何将文字信息与系统信息结合在一起?

如何将分组的输入与对齐的表单结合在一起?

将两个FART替换脚本结合在一起

如何将JavaScript代码和html代码结合在一起?

如何将时基轮询与等待的任务结合在一起

如何将5个以上的PDF与imagemagick转换结合在一起?

Python:如何将for循环和while循环结合在一起?