0%

here文档

Here文档

here Documents

语法格式

1
2
3
[COMMAND] <<[-] 'DELIMITER'
HERE-DOCUMENT
DELIMITER

常见用法

最常见的用法

1
2
3
4
5
6
7
[root@vm-101 ~]# cat <<END
GNU Bourne-Again SHell `pwd` $HOME
SYNOPSIS [options] [file]
END

GNU Bourne-Again SHell /root /root
SYNOPSIS [options] [file]

加上双引号(单引号也一样),pwd$HOME会原样输出。

1
2
3
4
5
6
7
[root@vm-101 ~]# cat <<"END"
GNU Bourne-Again SHell `pwd` $HOME
SYNOPSIS [options] [file]
END

GNU Bourne-Again SHell `pwd` $HOME
SYNOPSIS [options] [file]

<<-可以忽略\t

1
2
3
4
5
6
7
8
9
10
11
12
[root@vm-101 ~]# cat a.sh
#! /bin/bash

cat <<-EOF
echo "hello,world" # 行首都是tab,不是空格
echo "aaaaaaaaa" # 行首都是空格
EOF # 行首都是tab


[root@vm-101 ~]# bash a.sh
echo "hello,world"
echo "aaaaaaaaa"

利用here文档写入文件

1
2
3
4
5
6
7
8
9
10
[root@vm-101 ~]# cat << END > file.txt
`date`
`uname -a`
简单的两个命令
END

[root@vm-101 ~]# cat file.txt
2020年 04月 24日 星期五 11:11:43 CST
Linux vm-101 3.10.0-1062.9.1.el7.x86_64 #1 SMP Fri Dec 6 15:49:49 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
简单的两个命令

here文档重定向到管道

1
2
3
4
[root@vm-101 ~]# cat <<END | tr a-z A-Z			# tr是一个简单的字符替换的工具
> hello, world
> END
HELLO, WORLD

here文档结合while循环

1
2
3
4
5
6
7
8
9
[root@vm-101 ~]# while read line
> do
> echo $line
> done <<END
> 1111111111111111111
> 2222222222222222222
> END
1111111111111111111
2222222222222222222