在 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
我本以为会有三行输出(1
、2
、3
),但我收到的是空行。我错过了什么(可能是一个简单的错误)?我知道这个特定的输出可以用更简单的方式产生;该示例应作为更实质性应用程序的蓝图。
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
我正在尝试 this GNU bash, version 4.4.12(1)-release (x86_64-pc-linux-gnu)
:
$ echo <<EOF | cat
> 1
> 2
> 3
> EOF
我本以为会有三行输出(1
、2
、3
),但我收到的是空行。我错过了什么(可能是一个简单的错误)?我知道这个特定的输出可以用更简单的方式产生;该示例应作为更实质性应用程序的蓝图。
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