在 Bash 与 ZSH 中结合 heredoc 和输入重定向
Combining heredoc and input redirection in Bash vs ZSH
以下代码可以在 ZSH 上正常运行,将 heredoc 与文件内容结合起来 test.csv:
cat <<EOF <test.csv
id,name,age
EOF
如何在 Bash 中编写相同的命令?
$(<file)
将在 Bash 和 Zsh 中工作:
cat <<EOF
id,name,age
$(<test.csv)
EOF
它也可以在 Ksh 中工作(我相信它来自那里并被移植到 Bash 和 Zsh)。它的行为与 $(cat file)
相同,只是它不会调用 cat
并且将完全由 shell 本身处理。
它在 Bash 文档 Command Substitution 部分中有描述:
The command substitution $(cat file) can be replaced by the equivalent but faster $(< file).
除了之外,您还可以在一个命令组中使用cat
两次(用内存中存储所有test.csv
所需的内存来换取运行 cat
第二次)。
{
cat <<EOF
id,name,age
EOF
cat test.csv
}
或者,由于这里的文档太短,使用进程替换(仍然会分叉另一个进程):
cat <(echo "id,name,age") test.csv
以下代码可以在 ZSH 上正常运行,将 heredoc 与文件内容结合起来 test.csv:
cat <<EOF <test.csv
id,name,age
EOF
如何在 Bash 中编写相同的命令?
$(<file)
将在 Bash 和 Zsh 中工作:
cat <<EOF
id,name,age
$(<test.csv)
EOF
它也可以在 Ksh 中工作(我相信它来自那里并被移植到 Bash 和 Zsh)。它的行为与 $(cat file)
相同,只是它不会调用 cat
并且将完全由 shell 本身处理。
它在 Bash 文档 Command Substitution 部分中有描述:
The command substitution $(cat file) can be replaced by the equivalent but faster $(< file).
除了cat
两次(用内存中存储所有test.csv
所需的内存来换取运行 cat
第二次)。
{
cat <<EOF
id,name,age
EOF
cat test.csv
}
或者,由于这里的文档太短,使用进程替换(仍然会分叉另一个进程):
cat <(echo "id,name,age") test.csv