在 bash 中将多行逐字输入管道到命令中

roo*_*099 3 bash pipe heredoc echo cat

我想这样GNU bash, version 4.4.12(1)-release (x86_64-pc-linux-gnu)

$ echo <<EOF | cat
> 1
> 2
> 3
> EOF
Run Code Online (Sandbox Code Playgroud)

我本来期望输出三行(带有1, 2, 3),但我收到一个空行。我错过了什么(可能是一个简单的错误)?我知道可以以更简单的方式生成此特定输出;该示例应作为更实质性应用的蓝图。

Ole*_*nge 7

echo不从标准输入读取。也许你正在尝试做:

$ cat <<EOF | cat
> 1
> 2
> 3
> EOF
Run Code Online (Sandbox Code Playgroud)

这当然可以缩短为:

$ cat <<EOF
> 1
> 2
> 3
> EOF
Run Code Online (Sandbox Code Playgroud)


che*_*ner 7

echo不从标准输入读取,但也不需要。您可以在字符串中嵌入换行符。

$ echo '1
> 2
> 3' | cat
Run Code Online (Sandbox Code Playgroud)

您还可以使用printf在单独的行上输出每个单词:

$ printf '%s\n' 1 2 3
1
2
3
Run Code Online (Sandbox Code Playgroud)

或者使用命令组将多个命令的输出作为一个整体进行管道传输,如果您有比一组简单命令更复杂的echo命令,这会很有用,但作为示例:

{
  echo 1
  echo 2
  echo 3
} | cat
Run Code Online (Sandbox Code Playgroud)