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),但我收到一个空行。我错过了什么(可能是一个简单的错误)?我知道可以以更简单的方式生成此特定输出;该示例应作为更实质性应用的蓝图。
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)
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)