"cat << EOF" 在bash中的作用是什么?

24 浏览
0 Comments

"cat << EOF" 在bash中的作用是什么?

我需要编写一个脚本,以输入多行内容到一个程序(psql)中。

经过一番搜索,我发现下面的语法是可行的:

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

这样就可以构建多行字符串(从 BEGIN;END;,包括两个关键字),并将其作为输入传递给 psql

但我不知道它是如何工作的,有人能解释一下吗?

我主要是参考了 cat << EOF,我知道 > 输出到文件,>> 追加到文件,< 从文件读取输入。

<< 到底是做什么用的?

它有没有手册页面可以查看?

admin 更改状态以发布 2023年5月21日
0
0 Comments

这被称为heredoc格式,提供一个字符串到stdin中。有关更多详情,请参见https://en.wikipedia.org/wiki/Here_document#Unix_shells


来自man bash:

Here Documents

这种重定向类型指示shell从当前来源读取输入,直到看到只包含单词(没有尾随空格)的行。

然后,所有在这一点之前读取的行将被用作命令的标准输入。

heredocument的格式如下:

          <<[-]word
                  here-document
          delimiter

没有对word执行参数扩展,命令替换,算术扩展或路径名扩展。如果word中有任何带引号的字符,则分隔符是对word进行引用删除的结果,且here-document中的行未展开。如果word未加引号,则here-document的所有行都将受到参数扩展,命令替换和算术扩展的影响。在后一种情况下,字符序列\被忽略,必须使用\来引用\$`字符。

如果重定向运算符是<<-,则从输入行中剥离所有前导制表符,并包含delimiter的行。这使得shell脚本中的here-documents可以以自然方式缩进。

0
0 Comments

cat <语法在Bash中处理多行文本非常有用,例如在将多行字符串分配给Shell变量、文件或管道时。

cat <语法在Bash中的使用示例:

1. 将多行字符串分配给Shell变量

$ sql=$(cat <

$sql变量现在也包含了换行符。您可以用echo -e "$sql"进行验证。

2. 在Bash中将多行字符串传递给文件

$ cat < print.sh
#!/bin/bash
echo \$PWD
echo $PWD
EOF

print.sh文件现在包含如下内容:

#!/bin/bash
echo $PWD
echo /home/user

3. 在Bash中将多行字符串传递给管道

$ cat <

b.txt文件包含barbaz行。相同的输出被打印到stdout

0