在 Bash 与 ZSH 中结合 heredoc 和输入重定向

ret*_*phy 1 bash zsh heredoc cat io-redirection

以下代码在 ZSH 上运行没有问题,将 heredoc 与文件 test.csv 的内容相结合:

cat <<EOF <test.csv
id,name,age
EOF
Run Code Online (Sandbox Code Playgroud)

如何在 Bash 中编写相同的命令?

bla*_*ami 5

$(<file) 将在 Bash 和 Zsh 中工作:

cat <<EOF
id,name,age
$(<test.csv)
EOF
Run Code Online (Sandbox Code Playgroud)

它也可以在 Ksh 中工作(我相信它来自那里并被移植到 Bash 和 Zsh)。它的行为就像$(cat file)除了它不会调用cat并且将完全由外壳本身处理。

它在 Bash 文档命令替换部分中描述:

命令替换 $(cat file) 可以替换为等效但速度更快的 $(< file)。


che*_*ner 5

除了@blami 的回答之外,您还可以cat在命令组中使用两次(将所有存储在内存中所需的test.csv内存与cat第二次运行所需的时间进行交易)。

{
  cat <<EOF
  id,name,age
EOF

  cat test.csv
}
Run Code Online (Sandbox Code Playgroud)

或者,由于此处的文档太短,请使用进程替换(仍然派生另一个进程):

cat <(echo "id,name,age") test.csv
Run Code Online (Sandbox Code Playgroud)