我该如何通过管道传输 heredoc?

我该如何通过管道传输 heredoc?

我有一些字符串$o1$o2我想将它们制成表格。

我在这里看到一篇帖子说要这样做,但是它不起作用(Syntax error: end of file unexpected (expecting "}"))。

{
cat <<EndOfOutput
$o1
$o2
EndOfOutput
} | column

这可能吗?

答案1

是的,如果你确实按照你的帖子中说的去做的话。

你必须记住 heredoc 终止符不能缩进除非使用 heredoc 开始<<-EndOfOutput(破折号表示所有前导制表符 - 不是任何空格,而只是制表符 - 应该被删除)。

作品 也有效 失败 仅适用于标签页
{ 
cat <<结束
$o1
$o2
结束
} | 列
{ 
cat <<结束
$o1
$o2
结束
} | 列
{ 
cat <<结束
$o1
$o2
结束
} | 列
{ 
cat <<-End
$o1
$o2
End
} | 列

因此,您发布的没有任何缩进的版本实际上在所有 shell 上都能完美运行;但当您缩进它以使其看起来美观时,您就会收到错误。

当然,你可以不用括号(heredoc 可以在一行的中间打开)或者根本不用管道来省去一些麻烦:

作品 作品 作品
cat <<结束|列
$o1
$o2
结束
列 <<EndOfOutput 
$o1
$o2
EndOfOutput
<<EndOfOutput 列
$o1
$o2
EndOfOutput

(Heredocs 是 shell 语法特性,因此不需要cat特别指定。)

答案2

这有效。

column -t <<EOF
$o1
$o2
EOF

相关内容