在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 539|回复: 0

[其它] shell基础之EOF的用法

[复制链接]
发表于 2024-7-19 10:23:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
一、EOF的用法
EOF是(END Of File)的缩写,表示自定义终止符。既然自定义,那么EOF就不是固定的,可以随意设置别名,在linux按ctrl-d 就代表EOF。
EOF一般会配合cat能够多行文本输出。
其用法如下:
<<EOF        #开始
....                  #输入内容
EOF            #结束
还可以自定义,比如自定义:
<<ABC        #开始
....
ABC              #结束
通过cat配合重定向能够生成文件并追加操作,在它之前先熟悉几个特殊符号
<:输入重定向
>:输出重定向
>>:输出重定向,进行追加,不会覆盖之前内容
<<:标准输入来自命令行的一对分隔号的中间内容
例子1:
[root@ren5 ~]# cat <<EOF
> hello
> EOF
hello
我们知道cat的操作对象是文件,但是例1中cat的操作对象不是文件,而是用户输入;那么我们可以这样理解例1:先在文件file中输入“Hello”,再用cat file输出其中的内容。
也就是说我们可以用一个文件来替代"<< EOF EOF"。
反过来说,如果操作命令中的文件是输入对象,也可以用"<< EOF EOF"来替代的。
例子2:
[root@ren5 ~]# cat 1.txt
abc
[root@ren5 ~]# cat <<EOF > 1.txt             #向文件1.txt输入覆盖内容(也可以:cat > 1.txt <<EOF)
> 123
> 456
> 678
> LOL
> EOF
[root@ren5 ~]# cat 1.txt
123
456
678
LOL
“<< EOF EOF”的作用是在命令执行过程中用户自定义输入,它类似于起到一个临时文件的作用,只是比使用文件更方便灵活。
二、cat <<EOF 与 cat <<-EOF 的区别
两个都是获取stdin,并在EOF处结束stdin,输出stdout。
在我们使用cat <<EOF时,我们输入完成后,需要在一个新的一行输入EOF结束stdin的输入。EOF必须顶行写,前面不能用制表符或者空格。
如果重定向的操作符是<<-,那么分界符(EOF)所在行的开头部分的制表符(Tab)都将被去除。这可以解决由于脚本中的自然缩进产生的制表符。
例子1
[root@ren5 ~]# cat 2.sh
#!/bin/bash
cat <<EOF
你好,EOF!
EOF
[root@ren5 ~]# sh 2.sh
你好,EOF!
[root@ren5 ~]# sh 2.sh
2.sh:行4: 警告:立即文档在第 2 行被文件结束符分隔 (需要 `EOF')
你好,EOF!
      EOF
如果结束分解符EOF前有制表符或者空格,则EOF不会被当做结束分界符,只会继续被当做stdin来输入。
例子2
[root@ren5 ~]# cat 2.sh
#!/bin/bash
cat <<-EOF
你好,EOF!
      EOF
[root@ren5 ~]# sh 2.sh
你好,EOF!
虽然最后的EOF前面有多个制表符和空格,但仍然会被当做结束分界符,表示stdin的结束。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-22 14:47 , Processed in 0.014514 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表