终于可以优雅的捕获 shell heredoc 内容了

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`' ... 算得上复杂吗?)。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值