首页 > 其他 > 详细

bash here-documents here-string

时间:2020-09-25 20:53:04      阅读:31      评论:0      收藏:0      [点我收藏+]

 

bash有三种输入重定向

  • < : 用于文件
  • << : here-documents
  • <<< : here-strings

 

here-documents:

语法格式:

command <<[-]MARKER
    Here Document
MARKER

 

这个操作符指示bash从标准输入读取输入内容,知道读取到只包含MARKER的行为止

在 here-documents 中,我们选择一个单词作为一个标志。它可以是任何一个单词,比如,MARKER、END 和 EOF 等待,但要选择一个不会在我们的数据集合中出现的单词。在第一个标志(比如,<< MARKER)和第二标志(MARKER)之间的所有行都会被作为命令的标准输入。而且第二个标志(MARKER)必须独占一行。
例如,我们使用 here-documents 将文本传入 tr 命令,然后将文本的内容转换为大写:
技术分享图片

 

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

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

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

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

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

 

技术分享图片

 

 

 

 技术分享图片

行首的制表符被忽略了,变量PWD没有被替换

技术分享图片

 

 技术分享图片

 

 制表符没有被忽略,变量PWD被替换了

 

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

function usage(){
        cat <<-EOF
        Usage: command [-x] [-v] [-z] [files]
        A short explanation of the operation goes here
        It might be a few lines long, but shoudnt be excessive
        EOF
}

usage
~

 

技术分享图片

 

 

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

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


command <<< string
tr a-z A-Z <<< "ui op nm"

技术分享图片

 

 

str=nm vb op
tr a-z A-Z <<< $str

技术分享图片

 

 

技术分享图片

 

 

 

 

bash here-documents here-string

原文:https://www.cnblogs.com/dissipate/p/13731797.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!