shell heredoc 微妙之处

linux firefox 下,这篇文章被csdn排乱了,并且无法修改排版格式,这第一行倒可以修改!排版正确的在 javaeye

今天是我两个多月以来第一次使用 csdn 直接写博客,碰到这样的事情,让我太失望了,浪费我如此多的时间!

 

here doc 的一般用法:

[cmd

]

<<word

here-document

delimiter






















可以把 heredoc 的内容放进文件,也可以放进 shell 变量,参见以下代码:

 

 

使用`` 捕获 heredoc 内容比较丑陋,但这是我目前能找到的不需要中间文件就可以将heredoc内容存到变量中的唯一方式($(..)也可以,但似乎更丑陋,并且移植性更差)。我觉得比较好的捕获heredoc内容的方式应该象这样,不需要在delimiter 之后再放一个标记:

 

然而有两点需要注意:

当word中含有双引号(")时,heredoc结束标记(delimiter )需要写成 按shell移除引号的规则 移除引号之后 的形式。比如:

word="EOF"

delimiter=EOF

 

word= "EOF"here"doc1"

delimiter=EOFheredoc1

在这种情况下(word中包含引号),heredoc的文本内容会原原本本地输出,而不会被shell扩展。 反之 (word中无引号) heredoc的内容会按shell扩展规则被扩展,例如将$1扩展成参数等等。

 

还有一种情况,就是重定向 符号 << 可以使用 <<- ,在这种情况下,heredoc 文本中的前导 tab 字符会被删除,还有一点我没太看明白,也没试验出来( all leading tab characters will be stripped from input lines and the line containing the trailing delimiter )。

 

可以使用 heredoc 直接在 shell 中写比较复杂的 awk 程序,比直接在在引号中写要可读、易懂得多:

 

@see opengroup 上的文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值