linux - 对Shell中的一些标准输入或Heredoc用法感到困惑-LMLPHP

作为形象。所有命令都是相似的。
我知道如何使用它,但是我真的不知道细节。
有人知道吗?非常感谢你。

# does `cat` read fd and print?
$ cat file

# does `cat` read from stdin and print?
$ cat < file

$ cat - < file

# with heredoc or herestring, what methods `cat` command use to read from heredoc?stdin?

$ cat << EOF
heredoc> test
heredoc> EOF
test

$ cat <<< "test"

$ cat - << EOF
heredoc> test
heredoc> EOF
test

$ cat - <<< "test"

# and I dont why these commands works?

$ cat <(echo "test")

$ cat - <<(echo "test")

# why this command doesn't work?

$ cat - <(echo "test")

最佳答案

一些非常有用的Bash手册中的一些阅读 Material :

  • Redirection(<filename)-使标准输入重定向到文件filename
  • Here documents(<<WORD)-使标准输入从下一行重定向到脚本源,直到但不包括WORD
  • Here strings(<<<"string")-导致将标准输入重定向到字符串string(就好像该字符串已写入临时文件,然后将标准输入重定向到该文件一样)
  • Process substitution(<(command))-启动执行command的进程,并在命令行上插入一个类似于文件名的名称,以便从该"file"中读取产生
  • 命令的输出

    Posix建议使用-指示源文件是标准输入,这是许多命令所共有的。如果未指定文件,许多命令将从标准输入中读取。有些像cat,实现了两种指示意图是从标准输入中读取的方式。

    请注意,-<(command)都是文件名参数,而<filename<<WORD<<<"string"是重定向。因此,尽管它们从表面上看起来很相似,但在幕后却大不相同。他们的共同点是他们必须与投入有关。其中一些(但不是here-docs/strings)具有与输出有关的类似物,使用>而不是<

    07-28 02:57