“cat<EOF”在bash是如何工作的?我需要编写一个脚本来将多行输入到程序(psql).在Google搜索了一下之后,我发现下面的语法工作起来了:cat << EOF | psql ---params
BEGIN;`pg_dump ----something`update table .... statement ...;END;EOF这将正确构造多行字符串(从BEGIN;到END;,并将其作为输入psql.但是我不知道它是如何/为什么工作的,请有人解释一下好吗?我主要指的是cat << EOF,我知道>输出到文件,>>附加到文件中,<从文件中读取输入。什么<<是吗?有手册吗?
3 回答
沧海一幻觉
TA贡献1824条经验 获得超5个赞
在您的例子中,“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
> HERE <-- Leading space, so not considered end of string
> and a new line
> HERE <-- Now we have the end of the string
- 3 回答
- 0 关注
- 640 浏览
添加回答
举报
0/150
提交
取消