猿问

“cat<EOF”在bash是如何工作的?

“cat<EOF”在bash是如何工作的?

我需要编写一个脚本来将多行输入到程序(psql).

在Google搜索了一下之后,我发现下面的语法工作起来了:

cat << EOF | psql ---params
BEGIN;`pg_dump ----something`update table .... statement ...;END;EOF

这将正确构造多行字符串(从BEGIN;END;,并将其作为输入psql.

但是我不知道它是如何/为什么工作的,请有人解释一下好吗?

我主要指的是cat << EOF,我知道>输出到文件,>>附加到文件中,<从文件中读取输入。

什么<<是吗?

有手册吗?


弑天下
浏览 641回答 3
3回答

沧海一幻觉

在您的例子中,“EOF”被称为“这里的标签”。基本上<<Here告诉shell,您将输入一个多行字符串,直到“标记”。Here..你可以把这个标签命名为你想要的,它通常是EOF或STOP.关于这里标签的一些规则:标签可以是任何字符串,大写还是小写,尽管大多数人按照惯例使用大写字母。如果该行中还有其他单词,则该标记将不被视为“此处”标记。在这种情况下,它将仅仅被视为字符串的一部分。标记本身应该位于单独的行上,以被视为标记。标记应该在该行中没有前导或尾随空格,才能被视为标记。否则,它将被视为字符串的一部分。例子:$ cat >> test <<HERE> Hello world HERE <-- Not by itself on a separate line -> not considered end of string> This is a test>&nbsp; HERE <-- Leading space, so not considered end of string> and a new line> HERE <-- Now we have the end of the string
随时随地看视频慕课网APP
我要回答