Here Document 的用法

Here Document可以将它理解为“嵌入文档”“内嵌文档”“立即文档”,它将命令需要处理的数据或者字符串与代码放在一起,适用于命令需要处理的数据量很小,不必要将其单独放在一个文件中的情况。

总的来说,在脚本中嵌入一小段多行数据时,使用Here Document是很有用的,但是嵌入很大数据时,还是应该保持你的逻辑(你的代码)和你的输入(你的数据)分离,最好是在不同的文件中。

用法 说明
command <<END
    document
END
  1. command是 Shell 命令,<<END是开始标志,END是结束标志,document是输入的文档(也就是一行一行的字符串)。
  2. 使用command明林处理document部分的数据,直到遇到终止符END为止(终止符END不会被读取)
  3. 终止符END必须独占一行,并且必须要顶格写。终止符可以出现在正常的数据流中,只要它不是顶格写的独立的一行,就不会被作为结束标志。
  4. 终止符可以由用户自定义
  5. 使用单引号或者双引号将分界符包围起来可以使 document中的命令替换失效
  6. <<END之间增加-来消除制表符的影响
  7. Here Document 常用于向用户显示命令或者脚本的用法信息
需求 脚本 结果

cat 命令一般是从文件中读取内容,并将内容输出到显示器上,

借助 Here Document,cat 命令可以从键盘上读取内容

cat <<TEST

> test1

>  Test

>  TEST #终止符前有空格,不生效

> TEST #顶格写的终止符,不会输出

test1

Test

TEST

<是第二层命令提示符

正文中也可以出现结束标志TEST,但只要它不是独立的一行,

并且不顶格写,就不会生效。

在脚本文件中使用 Here Document,并将 document 中的内容转换为大写。
  1. #!/bin/bash
  2. #在脚本文件中使用立即文档
  3. tr a-z A-Z<<END
  4. one two three
  5. AbCdefGH
  6. END

ONE TWO THREE

ABCDEFGH

tr命令 将小写字母转换称大写字母

命令替换

默认情况下,document中出现的变量或命令会被求值或运行,Shell 会先将它们替换以后再交给 command

但也可以将分界符用单引号或者双引号包围起来使 Shell 替换失效

1.默认情况

  1. name=qpy
  2. cat <<END
  3. > ${name} is a girl
  4. > END

2.使用单/双引号包围END使命令替换失效

1)单引号

  1. cat <<'END'
  2. > ${name} is a girl
  3. > END

2)双引号

  1. cat <<"END"
  2. > ${name} is a girl
  3. > END

输出:qpy is a girl

输出:${name} is a girl

输出:${name} is a girl

在脚本文件中使用 Here Document时,如果在document的行首使用制表符时,

默认情况下,行首的制表符也被当做正文的一部分,但也可以通过<<END之间增加-来消除制表符的影响

制表符主要是用于代码对齐

1.默认情况

#!/bin/bash

cat <<END

aaa

bbb

ccc

END

2.在<<END之间增加-来消除制表符的影响

#!/bin/bash

cat <<-END

aaa

bbb

ccc

END

输出

  1. aaa
  2. bbb
  3. ccc

输出

  1. aaa
  2. bbb
  3. ccc
Here Document 最常用的功能还是向用户显示命令或者脚本的用法信息

 

Here String的用法

Here String 是 Here Document 的一个变种

用法 说明
command <<< string
  1. command 是 Shell 命令,string 是一个普通字符串。
  2. Here String可用于发送较短数据到进程中
  3. 当字符串中有空格时,必须使用单引号或双引号将字符串包围起来
  4. 使用双引号或不适用引号包围字符串时会解析字符串中的变量
  5. 使用单引号包围字符串时不会解析字符串中的变量
  6. 使用引号是,Here String 还可以接收多行字符串作为命令的输入
  7. 与 Here Document 相比,Here String 在发送变量内容(而不是文件)到像 grep 或者 sed 这样的过滤程序时相当方便
需求 脚本 结果
将小写字符串转换为大写字符串

tr a-z A-Z <<< one

ONE
使用双引号,会解析字符串中的变量

tr a-z A-Z <<< "one two three"

var=two

tr a-z A-Z <<<"one $var there"

ONE TWO THREE

ONE TWO THREE

使用单引号,不会解析变量

var=two

tr a-z A-Z <<<'one $var there'

ONE $VAR THERE

使用引号,Here String 可以接收多行字符串作为命令的输入

tr a-z A-Z <<<"one two there > four five six > seven eight"

ONE TWO THERE FOUR FIVE SIX SEVEN EIGHT

21 shell Here Document/String的更多相关文章

  1. 【Shell脚本学习24】Shell输入输出重定向:Shell Here Document,/dev/null文件

    Unix 命令默认从标准输入设备(stdin)获取输入,将结果输出到标准输出设备(stdout)显示.一般情况下,标准输入设备就是键盘,标准输出设备就是终端,即显示器. 输出重定向 命令的输出不仅可以 ...

  2. Linux Shell Here Document

    Here Document 是一种有特殊用处的代码块,他使用IO重定向的形式记录了一段临时的文本或交互命令,并且把这些文本或命令 依次的传递给一个程序或一个命令,作为他运行时的标准输入. Here d ...

  3. Linux编程 21 shell编程(环境变量,用户变量,命令替换)

    一.概述 这篇介绍shell的变量使用,跟其实语言一样,都有声明变量,使用变量,在shell中变量允许你临时地将信息存储中shell脚本中,以便和脚本的其他命令一起使用. 1.1 环境变量 在前面章节 ...

  4. String 和 document 的相互转换总结

    转自:http://blog.sina.com.cn/s/blog_7f865faf01014qrs.html 一.使用最原始的javax.xml.parsers,标准的jdk api // 字符串转 ...

  5. [Bash Shell] Shell学习笔记

    1. Shell简介 Shell本身是一个用C语言编写的程序,它是用户使用Unix/Linux的桥梁,用户的大部分工作都是通过Shell完成的.Shell既是一种命令语言,又是一种程序设计语言.作为命 ...

  6. [转帖][Bash Shell] Shell学习笔记

    [Bash Shell] Shell学习笔记 http://www.cnblogs.com/maybe2030/p/5022595.html  阅读目录 编译型语言 解释型语言 5.1 作为可执行程序 ...

  7. Shell碎碎念

    1. 字符串如何大小写转换 str="This is a Bash Shell script." 1> tr方式 newstr=`tr '[A-Z]' '[a-z]' < ...

  8. linux的shell脚本入门

    Linux shell脚本入门教程 为什么要进行shell编程 在Linux系统中,虽然有各种各样的图形化接口工具,但是sell仍然是一个非常灵活 的工具.Shell不仅仅是命令的收集,而且是一门非常 ...

  9. linux shell基础语法

    1.第一个Shell脚本 打开文本编辑器,新建一个文件,扩展名为sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好,如果你用php写shell 脚本,扩展名就用php好了. 输入一些代码 ...

随机推荐

  1. 9.7 top:实时显示系统中各个进程的资源占用状况

    top命令 用于实时地对系统处理器状态进行监控,它能够实时地显示系统中各个进程的资源占用状况.该命令可以按照CPU的使用.内存的使用和执行时间对系统任务进程进行排序显示,同时top命令还可以通过交互式 ...

  2. cp1 项目管理概述

    项目不成功:问题很多 chapter__1 ① 任务不明确 ② 变更 ③ 新技术 ④ 成本 ⑤ 进度 ⑥ 质量问题 ⑦ 开发混乱 ⑧ 用户 项目定义 项目 (Project) 是为了创造一个唯一的产品 ...

  3. MyBatis的Example如何按条件排序(Day_35)

    MyBatis的Example如何按条件进行排序? 背景:有时我们在使用mybatis example 进行查询时,需要进行相应的业务排序.本博客以下图为例 @Override public List ...

  4. lambda 函数执行流程 递归注意

  5. 书列荐书 |《黑天鹅&#183;如何应对不可预知的未来》【美】纳西姆 尼古拉斯 塔勒布 著

    你不知道的事比你知道的事更有意义,因为生活中发生了许多微小的事情,尽管出现的概率非常小,但是却以某一种巨大的力量影响我们的生活.但是由于思维习惯的问题,导致我们看问题的方式使得我们不能很快地把握事物的 ...

  6. python基础知识笔记(二) (出现语法以及颜色问题)

    以下是在学习Python时需要尤其要注意的点: 1.程序中出现中文,运行的时候出现如下错误: SyntaxError: Non-UTF-8 code starting with '\xc1' 则是编码 ...

  7. 在NVIDIA A100 GPU上利用硬件JPEG解码器和NVIDIA nvJPEG库

    在NVIDIA A100 GPU上利用硬件JPEG解码器和NVIDIA nvJPEG库 根据调查,普通人产生的1.2万亿张图像可以通过电话或数码相机捕获.这样的图像的存储,尤其是以高分辨率的原始格式, ...

  8. 高效Tensor张量生成

    高效Tensor张量生成 Efficient Tensor Creation 从C++中的Excel数据中创建Tensor张量的方法有很多种,在简单性和性能之间都有不同的折衷.本文讨论了一些方法及其权 ...

  9. TcaplusDB祝大家端午安康!

    "五月五,端午到,赛龙舟,真热闹.吃粽子,带香包,蚊虫不来身边闹."这首脍炙人口.描绘着端午节风俗的儿歌,想必大家都听过. 每年的农历五月初五,是我国四大传统节日(春节.清明节.端 ...

  10. 28.qt quick-ListView高仿微信好友列表和聊天列表

    1.视图模型介绍  在Qml中.常见的View视图有: ListView: 列表视图,视图中数据来自ListModel.XmlListModel或c++中继承自QAbstractItemModel或Q ...