美文网首页Shell 脚本成长笔记
Shell 重定向(三):从文本或字符串输入

Shell 重定向(三):从文本或字符串输入

作者: 赵者也 | 来源:发表于2017-05-19 21:00 被阅读27次

Bash 还有一种重定向的类型是 here-documents,here-documents 重定向的操作符是 “<<MARKER”。这个操作符指示 Bash 从标准输入读取输入的内容,直到读取到只包含 MARKER 的行为止。

here-documents 的语法格式如下所示:

command <<[-]MARKER
    Here Document
MARKER

在 here-documents 中,我们选择一个单词作为一个标志。它可以是任何一个单词,比如,MARKER、END 和 EOF 等待,但要选择一个不会在我们的数据集合中出现的单词。在第一个标志(比如,<< MARKER)和第二标志(MARKER)之间的所有行都会被作为命令的标准输入。而且第二个标志(MARKER)必须独占一行。

例如,我们使用 here-documents 将文本传入 tr 命令,然后将文本的内容转换为大写:

tr 命令运行结果

重定向操作符“<<”和定界标志符“END”之间的空格分隔是可选的。

在重定向操作符“<<”和定界标志符“END”之间追加减号“-”(即<<-END)将会忽略行首的制表符。

忽略行首制表符运行结果

** 注意 **
完结标志符(END)必须写在行首

默认情况下,Bash 替换会在 here-documents 的内容上执行,即 here-documents 内部的变量和命令会被求值或运行。例如:

Bash 替换运行结果

我们可以使用单引号或双引号扩起定界符来使 Bash 替换失效。例如:

关闭 Bash 替换运行结果

其实,here-documents 最常用的功能还是用于向用户显示命令或脚本的用法信息。例如,类似如下所示的函数 usage():

usage() {
        cat <<-EOF
        usage: command [-x] [-v] [-z] [file ...]
        A short explanation of the operation goes here.
        It might be a few lines long, but shouldn't be excessive.
        EOF
}

** 注意 **
如果我们尝试在脚本嵌入一小块多行数据,使用 here-documents 是很有用的。使用 here-documents 嵌入很大的数据块是一个不好的习惯。我们应该保持我们的逻辑(你的代码)与我们的输入(我们的数据)分离,最好是在不同的文件中,除非是输入一个很小的数据集。

here-strings 是 here-documents 的一个变种。它由操作符 “<<<” 和作为标准输入的字符串构成(是被 Shell 作为一个整体来处理的序列),here-strings 是一个用于输入重定向的普通字符串,并不是一个特别的字符串,其语法如下:

command <<< WORD

单个单词不需要使用引号引用:

tr a-z A-Z <<< one

如果操作符 “<<<” 后面是带有空格的字符串,则字符串必须使用双引号引用:

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

上述的实例还可以改写为类似如下:

str="one two three"
tr a-z A-Z <<< $str

这对于发送变量中的数据到进程是非常方便的。here-strings 更简短,总体来说比 here-documents 更方便。

here-strings 还接收多行字符串作为标准输入,如下实例所示:

运行结果

本文参考自 《Linux Shell命令行及脚本编程实例详解

相关文章

  • Shell 重定向(三):从文本或字符串输入

    Bash 还有一种重定向的类型是 here-documents,here-documents 重定向的操作符是 “...

  • linux的重定向管道详解

    重定向标准 I/O Linux shell(比如 Bash)接收或发送序列和字符串流 形式的输入或输出。每个字符都...

  • UNIX SED的基本信息收集

    sed是一个非交互性性文本编辑器,它编辑文件或标准输入导出的文件拷贝。标准输入可能是来自键盘、文件重定向、字符串或...

  • 重定向

    输出重定向 输入重定向 错误重定向 管道 shell中特殊符号

  • shell中的重定向

    linux shell下常用输入输出操作符是: 输出重定向 输入重定向

  • 管道符、重定向与环境变量

    输入输出重定向 标准输入重定向(STDIN,文件描述符为0):默认从键盘输入,也可以从其他文件或命令输入 标准输出...

  • Shell编程之输入重定向

    title: Shell编程之输入重定向tags: shell编程,重定向 前提 刚刚看到一段代码,类似于下面的这...

  • Shell语言学习(四)

    内容一:Shell脚本语言-管道 内容二:Shell脚本语言-重定向 重定向目的:就是操作文件输入和输出1、学习-...

  • 【shell】脚本读取输入重定向(<)文件

    shell脚本使用<来重定向输入,如,< filename.txt 将文件重定向到标准输入,如何在脚本中读取文件内...

  • vim常用操作与重定向

    shell输入重定向和输出重定向 1.输出重定向 下面以/etc下的passwd为例,演示不同的重定向方式。(前提...

网友评论

    本文标题:Shell 重定向(三):从文本或字符串输入

    本文链接:https://www.haomeiwen.com/subject/mwojxxtx.html