EOF用法


一、EOF的基本用法

EOF是(END Of File)的缩写,表示自定义终止符。既然自定义,那么EOF就不是固定的,可以随意设置别名,在linux按ctrl-d 就代表EOF。

EOF一般会配合cat能够多行文本输出。

其用法如下:

<<EOF        #开始

....         #输入内容

EOF          #结束

还可以自定义,比如自定义:

<<ABC        #开始

....		 #输入内容

ABC          #结束

通过cat配合重定向能够生成文件并追加操作,在它之前先熟悉几个特殊符号

<:输入重定向
>:输出重定向
<<:标准输入来自命令行的一对分隔号的中间内容
>>:输出重定向,进行追加,不会覆盖之前内容

例如1:

[root@localhost tmp]#  cat <<EOF
> hello world
> EOF
hello world
[root@localhost tmp]#

我们知道cat的操作对象是文件,但是例1中cat的操作对象不是文件,而是用户输入;那么我们可以这样理解例1:先在文件file中输入“Hello”,再用cat file输出其中的内容。也就是说我们可以用一个文件来替代"<< EOF EOF"。

反过来说,如果操作命令中的文件是输入对象,也可以用"<< EOF EOF"来替代的。

例如2:

[root@localhost tmp]# cat test.log
abc
[root@localhost tmp]#
[root@localhost tmp]# cat <<EOF >test.log
> pig
> cat
> dog
> EOF
[root@localhost tmp]#
[root@localhost tmp]# cat test.log
pig
cat
dog
[root@localhost tmp]#

在例2中,我们在test.log中,先用<<EOF ... EOF进行stdin的输入,在用>重定向到test.log中,将test.log原有的内容覆盖。

二、cat <<EOF 与 cat <<-EOF 的区别
  • 共同点

两个都是获取stdin,并在EOF处结束stdin,输出stdout。

  • 不同点

cat <<EOF:我们输入完成后,需要在一个新的一行输入EOF结束stdin的输入。EOF必须顶行写,前面不能用制表符或者空格。

例如3:(EOF顶格)

[root@localhost tmp]# cat test.log
#!/usr/bin/bash

#!/bin/bash

cat <<EOF

hello,EOF!

EOF

[root@localhost tmp]#
[root@localhost tmp]# sh test.log

hello,EOF!

[root@localhost tmp]#

cat <<-EOF:那么分界符(EOF)所在行的开头部分的制表符(Tab)都将被去除。这可以解决由于脚本中的自然缩进产生的制表符。

例如4:(EOF未顶格)

[root@localhost tmp]# cat test.log
#!/usr/bin/bash

#!/bin/bash

cat <<EOF

hello,EOF!

	EOF

[root@localhost tmp]# sh test.log
test.log: line 9: warning: here-document at line 5 delimited by end-of-file (wanted `EOF')

hello,EOF!

 EOF
[root@localhost tmp]#


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM