前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。

什么是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

注: >这个符号是终端产生的提示输入信息的标识符

这里要注意几点

  1. EOF 只是一个标识而已,可以替换成任意的合法字符
  2. 作为结尾的delimiter一定要顶格写,前面不能有任何字符
  3. 作为结尾的delimiter后面也不能有任何的字符(包括空格)
  4. 作为起始的delimiter前后的空格会被省略掉

Here Document 不仅可以在终端上使用,在shell 文件中也可以使用,例如下面的here.sh 文件

cat << EOF > output.sh
echo "hello"
echo "world"
EOF

使用 sh here.sh 运行这个脚本文件,会得到output.sh 这个新文件,里面的内容如下

echo "hello"
echo "world"

实例

在命令行中通过 wc -l 命令计算 Here Document 的行数:

$ wc -l << EOF欢迎来到菜鸟教程www.runoob.com
EOF
3          # 输出结果为 3 行
$-l << EOF欢迎来到菜鸟教程www.runoob.com
EOF
3          # 输出结果为 3 行
$

我们也可以将 Here Document 用在脚本中,例如:

#!/bin/bash
# author:菜鸟教程
# url:www.runoob.comcat << EOF
欢迎来到
菜鸟教程
www.runoob.com
EOF
# author:菜鸟教程
# url:www.runoob.comcat << EOF
欢迎来到
菜鸟教程
www.runoob.com
EOF

执行以上脚本,输出结果:

欢迎来到
菜鸟教程
www.runoob.com
菜鸟教程
www.runoob.com

/dev/null 文件

如果希望执行某个命令,但又不希望在屏幕上显示输出结果,那么可以将输出重定向到 /dev/null:

$ command > /dev/null> /dev/null

/dev/null 是一个特殊的文件,写入到它的内容都会被丢弃;如果尝试从该文件读取内容,那么什么也读不到。但是 /dev/null 文件非常有用,将命令的输出重定向到它,会起到"禁止输出"的效果。

如果希望屏蔽 stdout 和 stderr,可以这样写:

$ command > /dev/null 2>&1> /dev/null 2>&1

注意:0 是标准输入(STDIN),1 是标准输出(STDOUT),2 是标准错误输出(STDERR)。

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的时候可以将内容部分进行缩进,方便阅读代码。

shell 的here document 用法、输入/输出重定向相关推荐

  1. Shell——输入/输出重定向

    Shell 输入/输出重定向 大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回​​到您的终端.一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端.同样,一个命令 ...

  2. [linux] shell 输入/输出重定向 、 文件包含

    Shell 输入/输出重定向 大多数 UNIX 系统命令从终端接受输入并将所产生的输出发送回​​到终端.一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是自己的终端.同样,一个命令通常将 ...

  3. Linux之shell编程篇-----Shell 函数和Shell 输入/输出重定向

    ​ 最近发现了一个挺厉害的人工智能学习网站,内容通俗易懂,风趣幽默,感兴趣的可以点击此链接进行查看:床长人工智能教程 废话不多说,请看正文! ​ Shell 函数 1. 自定义函数 linux she ...

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

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

  5. Shell 输入/输出重定向

    概述 大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回​​到您的终端. 一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端. 同样,一个命令通常将其输出写入到标 ...

  6. Shell中的数据重定向--输入/输出重定向

    在了解重定向之前,我们先来看看linux 的文件描述符. linux文件描述符:可以理解为linux跟踪打开文件,而分配的一个数字,这个数字有点类似c语言操作文件时候的句柄,通过句柄就可以实现文件的读 ...

  7. 15-shell 输入/输出重定向

    大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回到您的终端. 一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端. 同样,一个命令通常将其输出写入到标准输出,默 ...

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

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

  9. Linux:输入/输出重定向

    文章目录 1 输入重定向 2 输出重定向 3 标准错误文件重定向 4. Here Document 5 /dev/null 文件 6. 追加重定向 一个命令通常从一个叫标准输入的地方读取输入,默认情况 ...

最新文章

  1. mybatis常用标签和动态查询
  2. font-family字体总结
  3. linux命令怎么打开优盘,Linux下U盘使用具体步骤
  4. 最佳调度问题pascal程序
  5. python中tkinter的使用-下
  6. 2 使用_索尼黑卡RX100M6的使用指南2
  7. 机器学习基石--学习笔记02--Hard Dual SVM
  8. tcp并发服务器_在Go中构建并发TCP服务器
  9. ajax jinja,在向Flask发出jQuery AJAX请求后渲染Jinja
  10. javascript监听输入框_html通过JS/jQuery实现 实时监听输入框input的内容
  11. 一、虚拟机,CentOS安装教程,Linux文件系统结构,Linux文件命名规则
  12. 重装系统四种方法(CGI还原,NTSetup安装,GHOST还原,手动GHOST)的区别
  13. Send函数和Recv函数解析
  14. python学习第二天——编写名片
  15. pm9screw php,PHP使用Screw把源代码加密
  16. 怎样推导圆面积计算公式?
  17. nginx php fastcgi curl locahost 48 timeout
  18. 居于canvas的原生js抽奖小程序
  19. The types of the interface org.apache.flink.util.OutputTag could not be inferred.
  20. Python操控微信,实现微信机器人

热门文章

  1. 【LeetCode - 32】最长有效括号
  2. 【HDU - 5876】Sparse Graph(补图bfs,STLset)
  3. linux串口写入命令失败,linux – 从串口读取失败
  4. java日志级别的作用_Java系统日志级别对性能的影响性
  5. 腾讯云COS对象存储图片文件API的详细步骤过程
  6. 遍历这些字符串,如果字符串没有包含数字的, * 就将字符串中的小写字母转成大写字母并打印字符串
  7. php curl 数据采集 空,PHP curl从网站返回空数组的数据
  8. linux安装下载中文包,linux下安装中文包和字体
  9. leetcode124. 二叉树中的最大路径和
  10. redis——旧版复制