在 bash 中将多个逐字行输入命令

Pipe multiple verbatim lines into command in bash

我正在尝试 this GNU bash, version 4.4.12(1)-release (x86_64-pc-linux-gnu):

$ echo <<EOF | cat
> 1
> 2
> 3
> EOF

我本以为会有三行输出(123),但我收到的是空行。我错过了什么(可能是一个简单的错误)?我知道这个特定的输出可以用更简单的方式产生;该示例应作为更实质性应用程序的蓝图。

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

$ cat <<EOF | cat
> 1
> 2
> 3
> EOF

当然可以缩短为:

$ cat <<EOF
> 1
> 2
> 3
> EOF

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

$ echo '1
> 2
> 3' | cat

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

$ printf '%s\n' 1 2 3
1
2
3

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

{
  echo 1
  echo 2
  echo 3
} | cat