Linux|系统管理|WEB开发

关注Linux,系统管理,WEB开发以及开源世界

Bash里的here Document

| Comments

不得不再一次说,Advanced bash-scripting guide(a.k.a ABS)这本书太强悍了,对于bash里的Here Document用法,我说见过的其他关于shell/bash编程的书里,都是简单的介绍这个东西是做什么的,基本用法是什么,然后给出一个例子就完成了。
我也一直以为他就是为了便于多行的输入。但是看完ABS对此一整章的介绍,我才发现,其实here document没有那么简单。

这里就不全文翻译了,把几种用法总结一下吧。

简单用法

可以用在简单的命令输出,交互程序里。给出几个例子:

进制前导tab输出

这是从曾经遇到的一个问题,在Heredocument里,我为了代码格式好看,采取了tab缩进的方式,但是带来的坏处就是这些tab键也会成为输出,而这并不是我所需要的。因此我需要一个即解决代码格式美观,又不影响输出的办法,原来here document能做到这点,那就是在给出的limit string之前加上一个-符号,比如:

$ ./test.sh
includeing a leading tab
   includeing some spaces

注:它仅仅只是制止前导tab键,对于空格则不受影响。另外要注意的是,如果你的编辑器设置了tab转空格的话,那你会发现以上代码似乎并不是生效。
因为所有的tab都转成4个或者8个或者你设置的数量个空格符号了。

参数替代

here document支持参数和命令替代,可以传递不同的参数给here document文本,从而获得不同的输出,比如:

关闭参数替代

给limit string加上转移或者引号,就可以进制here document的文本参数或者命令替代,这对于生成脚本甚至程序代码提供了帮助。

我们也可以利用here document的输出来设置变量,这其实算是命令替代的一种迂回方式了。

variable=$(cat < 

充当函数输入功能

here document也能提供在同一个脚本里一个函数的输入能力。

注释代码块

用来快速注释注释一段代码,一般用于调试目的,看下面这个比较长的例子:

自我文档化

Comments