在shell脚本中,如果出现要将几行文字或者一大段文字传递给某个
命令时,会使用Here documents,这个单词还没合适的翻译,但是它
的使用很简单,大部分的shell脚本在刚开始都会你输入的参数,如果
参数不对,就会打印出使用方法然后返回。
常见的方式是在脚本开头,用一个help函数,help会打印使用方法
和返回。使用方法一般有几行,所以使用Here documents来包含。
help()
{
cat <<HELP
how to use the shell script
......
HELP
exit 0
}
这段代码看似没有问题,比较简明易懂,但是当你运行脚本时,会发现
莫名其妙的提示脚本末尾有语法错误。我找了半天没发现。后面在网上
乱搜发现,发现第二个HELP要顶格,就是要放在开头。后面我想想,为什么
会有这个规定呢?我想这可能是Here documents的实现里面,它是如何判断
两个HELP之间的内容呢,先获取了第一个HELP以后,让后面所有的字符和
它匹配吗?那样效率估计很低。所以它有可能是在每个\n后面去判断是否存在
HELP这个字符串。
我又做了这样的测试:
help()
{
cat <<HELP
how to use the shell script
...... HELP
exit 0
}
发现也会报语法错误
只有如下这样才不会报错:
help()
{
cat <<HELP
how to use the shell script
......
HELP
exit 0
}
也不知道shell脚本解释器的源码在哪里,所以
我暂时肯定我上面的猜测。