浏览 1587 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-02-05
最后修改:2010-02-06
eval 'var=`cat`' <<"+EOF" 终于可以用这种方式捕获 heredoc 的内容了 我太高兴了! 原先那种方式: var=`cat << "+EOF2" heredoc content EOF2 ` 不光麻烦,而且会出问题,如果正文中出现一个未被引号引起来的`就挂了 用 $(cat ...) 的方式也一样不好 +EOF echo "$var"
旧的那篇:shell heredoc 微妙之处
这种写法主要解决的问题是:避免了嵌套结构,于是 heredoc 的语法解析细节就和外层的shell调用(`..`或者$(..))毫不相干了。 这种写法为什么可以正确地工作?因为eval引入了一个子结构,这样eval ... 作为一个整体来接受输入,不管它是 heredoc 还是别的什么,比如也可以是一个文件重定向(eval 'var=`cat`' < file)。 因为 shell 的管道语法限制了数据流的方向,只能从左向右,而 heredoc 的数据流却是从右向左,于是,事情就变得有点复杂了( eval 'var=`cat`' ... 算得上复杂吗?)。
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |