什么是Here Document?
Here Document 是在Linux Shell 中的一种特殊的重定向方式,它的基本的形式如下
cmd << delimiter
  Here Document Content
delimiter

其作用是将两个 delimiter 之间的内容(Here Document Content 部分) 传递给cmd 作为输入参数;
比如在终端中输入cat << EOF,系统会提示继续进行输入,输入多行信息再输入EOF,中间输入的信息将会显示在屏幕上;如下:
fish@mangos:~$ cat << EOF
> First Line
> Second Line
> Third Line EOF
> EOF
First Line
Second Line
Third Line EOF
注:'>'这个符号是终端产生的提示输入信息的标识符
 
这里要注意几点:
EOF只是一个标识而已,可以替换成任意的合法字符(约定大于配置);
作为结尾的delimiter一定要顶格写,前面不能有任何字符;
作为结尾的delimiter后面也不能有任何的字符(包括空格!!!);
作为起始的delimiter前后的空格会被省略掉;

Here Document 不仅可以在终端上使用,在shell 文件中也可以使用,例如下面的here.sh 文件
cat << EOF > output.txt
echo "hello"
echo "world"
EOF

使用 sh here.sh 运行这个脚本文件,会得到output.txt 这个新文件,其内容如下:
echo "hello"
echo "world"

Here Document的变形

delimiter 与变量
在Here Document 的内容中,不仅可以包括普通的字符,还可以在里面使用变量;
例如将上面的here.sh 改为
cat << EOF > output.sh
echo "This is output"
echo $1
EOF
使用sh here.sh HereDocument 运行脚本得到output.sh的内容

echo "This is output"
echo HereDocument
在这里 $1 被展开成为了脚本的参数 HereDocument
 
但是有时候不想展开这个变量怎么办呢,可以通过在起始的 delimiter的前后添加 " 来实现,例如将上面的here.sh 改为
cat << "EOF" > output.sh  #注意引号
echo "This is output"
echo $1
EOF

得到的output.sh 的内容为
echo "This is output"
echo $1

<< 变为 <<-

Here Document 还有一个用法就是将 '<<' 变为 '<<-'
使用 <<- 的唯一变化就是Here Document 的内容部分每行前面的tab(制表符)将会被删除掉;
该用法在编写Here Document时可将内容部分进行缩进,方便阅读代码.

转自:https://blog.csdn.net/wangjunjun2008/article/details/24351045

转载于:https://www.cnblogs.com/poissonnotes/p/9041737.html

linux shell的here document用法(cat EOF)相关推荐

  1. linux here用法,linux shell的here document用法(cat EOF)

    什么是Here Document? Here Document 是在Linux Shell 中的一种特殊的重定向方式,它的基本的形式如下 cmd << delimiter Here Doc ...

  2. shell 的here document 用法、输入/输出重定向

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 什么是Here Document Here Document 是在Linux Shell 中的一种特 ...

  3. linux shell里面nohup的用法

    为什么80%的码农都做不了架构师?>>>    百度了很多,但都不是官方的,按照linux命令中,一切可以--help的思想 我们就来 --help下. 其实linux命令不难学 只 ...

  4. linux shell awk 中 printf 用法

    目录 printf 简介 printf 转义字符 printf 修饰符 printf 格式说明符 示例1 示例2 示例3 printf 简介 打印输出时,可能需要指定字段间的空格数,从而把列排整齐.在 ...

  5. linux shell数组与字典用法总结

    shell里面也有数组和所谓的字典,数组分为索引数组和关联数组(关联数组也就是在其他语言里面的字典,在数组和字典的操作方式基本一致). 1. 数组 1.1 创建数组 - 创建空数组 `names=() ...

  6. linux shell 逻辑判断 [] [[]] -n -z 用法区别

    1.在中括号中,判断变量的值, 加不加双引号的问题? -z 判断 变量的值,是否为空: zero = 0 - 变量的值,为空,返回0,为true - 变量的值,非空,返回1,为false -n 判断变 ...

  7. linux cat eof如何指定变量,Linux cat和EOF的使用

    在某些场合,可能我们需要在脚本中生成一个临时文件,然后把该文件作为最终文件放入目录中.(可参考ntop.spec文件)这样有几个好处,其中之一就是临时文件不是唯一的,可以通过变量赋值,也可根据不同的判 ...

  8. linux shell脚本EOF妙用

    原文:https://blog.csdn.net/zongshi1992/article/details/71693045 在平时的运维工作中,我们经常会碰到这样一个场景: 执行脚本的时候,需要往一个 ...

  9. linux 关联数组,Linux shell数组与关联数组的用法实例

    Linux shell数组与关联数组的用法实例 1. 关联数组 使用 declare -A(declare 的用法请使用 help 进行查看,help declare) 进行声明关联数组变量: $ d ...

最新文章

  1. 【javaweb】eclipse重启后tomcat打不开解决方法
  2. Android 之 布局训练
  3. 2016 -1 -3 导航控制器的学习
  4. 光伏发电项目将全面摸底复核
  5. 算法与数据结构(part1)--算法简介及大O表示法
  6. c# uri.host_C#| 具有示例的Uri.Equality()运算符
  7. 两万字详细爬虫知识储备,数据采集与清洗基础习题(一)头歌参考答案
  8. 对象序列化(六):应用实例-程序退出时保存状态
  9. 10亿数据量只需要100MB内存,redis的位存储为什么这么牛?
  10. python 批量打印PDF(转)
  11. joy数据向量化处理
  12. 笔记(一)Home Assistant简介
  13. 有趣的深度学习——使用 BERT 实现一个古体诗生成器
  14. Windows 10正式版官方原版ISO镜像下载
  15. SayAsYouWish:Fine-grained Control of Image Caption Generation with Abstract Scene Graphs ---- 论文阅读笔记
  16. c语言文件压缩怎么求压缩比,文件压缩C语言程序设计报告.doc
  17. 集火全屋智能“后装市场”,真正玩得转的没几个
  18. 电子变压器的设计工艺重不重要?
  19. 《瓦尔登湖》中的“访客”篇中一首小诗与刘禹锡的《陋室铭》
  20. Nginx使用及配置

热门文章

  1. Python flask 开发工具和框架安装
  2. C语言编程规范--常用缩写词
  3. 带界面的OCX制作实例
  4. 利用ioctl获取本机指定设备的MAC地址
  5. Linux 内核打印级别
  6. linux字符设备驱动之字符之异步通知
  7. Taro+react开发(32)注意符号
  8. javascript学习系列(3):数组中的foreach方法
  9. [html] html元素哪些标签是不可替换元素?哪些是可替换元素?
  10. [css] 用css实现饼图效果