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. 关于C语言的指针数组与指针数组的个人理解

    一.指针数组与指针数组 1,指针数组 顾名思义,即一个元素全部是指针的数组,其形式与普通数组相似,形式如 *a[N]. 在理解指针数组的使用方式前,我先来说下我个人对数组的理解. 比如一维整形数组(形 ...

  2. <fmt:formatDate> 标签,日期格式化问题(Day_24)

    一个时间显示问题,出生日期显示应为: yyyy-MM-dd,却显示: GMT格式(Wed Jun 15 00:00:00 CST 1983) 解决方案: 将图一改为图二. 图一: 图二: 最后: 注意 ...

  3. MyBatis-编写自定义分页插件

    一.基础知识 本文测试和源码分析参考版本: Mybatis-version:3.5.5 本文相关测试源代码:https://github.com/wuya11/mybatis_demo 1.1 参考方 ...

  4. GO学习-(34) Go实现日志收集系统3

    Go实现日志收集系统3   再次整理了一下这个日志收集系统的框,如下图 这次要实现的代码的整体逻辑为: 完整代码地址为: etcd介绍 高可用的分布式key-value存储,可以用于配置共享和服务发现 ...

  5. js发送请求给服务端

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. MindSpore算子支持类

    MindSpore算子支持类 Q:在使用Conv2D进行卷积定义的时候使用到了group的参数,group的值不是只需要保证可以被输入输出的维度整除即可了吗?group参数的传递方式是怎样的呢? A: ...

  7. 正则表达式re模块的基础及简单应用

    一.re的简介 re模块是python独有的匹配字符串的模块 该模块中的很多功能是基于正则表达式实现 二.正则表达式的基础语法 元字符 匹配内容说明 . 匹配除换行符以外的任意字符 \w 匹配字母或数 ...

  8. 笔记-13-多线程 Thread方法 线程安全 生产者和消费者 死锁和阻塞 练习

    题目1 编写程序,创建两个线程对象,一根线程循环输出"播放背景音乐",另一根线程循环输出"显示画面";要求: 1: 1个线程使用Runnable接口的匿名内部类 ...

  9. Redisson 分布式锁实现之前置篇 → Redis 的发布/订阅 与 Lua

    开心一刻 我找了个女朋友,挺丑的那一种,她也知道自己丑,平常都不好意思和我一块出门 昨晚,我带她逛超市,听到有两个人在我们背后小声嘀咕:"看咱前面,想不到这么丑都有人要." 女朋友 ...

  10. ABAP SORT排序注意点

    SORT TABLE BY XXX XXX .如果不加任何语法都是默认升序,延伸可以用ASCENDING和DESCENDING对具体的字段进行升序和降序排列. 简单通俗的来阐释一下,在字段名后面加AS ...