今天说shell的here document,何为here document?答:“这是文档”!。答案很简单,就跟易经里面解释卦一样,“卦者,挂也”!
在自动化构建一些代码时,here document技术非常常用,它在各种动态语言中使用和表现都类似。
here document就是告诉程序:
- <<EOF
- ...
- ...
- EOF
这个对符号之间的内容就是一段文档,不是程序。最后记得,here document是一种语法!和if,where一样,都是语法!
来看看here document的具体使用:
1、写入内容到文件中:
- $ cat cat.sh
- #!/bin/bash
- file="data.txt"
- cat > $file <<EOF
- hello c
- hello perl
- hello ruby
- hello erlang
- EOF
这里就会把EOF之间的内容写入data.txt文件中,会覆盖data.txt中原来的内容;如果要追加的话,将 cat > $file 修改为 cat >> $file。
2、变量替换
- #!/bin/bash
- file="data.txt"
- lang=(c erlang perl ruby shell)
- cat > $file <<EOF
- ${lang[*]}
- EOF
这里位于here document中的变量${lang[*]}会被替换和计算.
3、关闭变量替换
- #!/bin/bash
- file="data.txt"
- lang=(c erlang perl ruby shell)
- cat > $file <<"EOF"
- ${lang[*]}
- EOF
这里变量${lang[*]}就不会被替换和计算了;使用perl的同学需要注意,如果不要变量被解释,需要用单引号将EOF括起来;
通过这三点,我们就可以用shell来生成我们需要的文件了,比如生成其他程序的源代码!
4、shell代码的块注释
- #!/bin/bash
- # 块注释
- : <<COMMENT
- for((i=0;i < 10;i++))
- do
- echo $i
- done
- COMMENT
这里使用了匿名here document技术,实现了在shell中进行块注释,for循环不会被解释和运行。
转载于:https://blog.51cto.com/10lover10/1098337