内嵌文档(Here Documents)
内嵌文档(Here Documents)
的完整用法如下:
[n]<<[-]word
here-document
delimiter
常规用法
cat <<EOF
a text line
a command substitution: `pwd`
a parameter expansion: $$
EOF
# 输出
a text line
a command substitution: /Users/lishaolin/Workspace/Shell/
a parameter expansion: 1038
这种用法会执行命令替换, 展开变量等. 是否可以不执行命令替换, 展开变量呢?当然可以,这就是下一种用法了。
带引号(”或”“)的word
cat <<EO'F'
a text line
a command substitution: `pwd`
a parameter expansion: $$
EOF
# 输出
a text line
a command substitution: `pwd`
a parameter expansion: $$
当word
带一对引号(”或”“),内嵌文档
就不会执行命令替换, 展开变量。再琢磨一遍前面的描述,只要word
带一对引号(”或”“),就可以了,也就是说,'EOF'
, "EOF"
, ""EOF
, EOF""
, EO""F
, EO"F"
等等都是可以的!
带减号(-)的word
cat <<-EOF
tab
white space
abc
EOF
# 输出
tab
white space
abc
减号(-)
可以去掉内嵌文档
中头部(leading)的tab
,同样也会去掉delimiter
中的头部tab
。
内嵌字符串(Here Strings)
内嵌字符串(Here Strings)
的完整用法如下:
[n]<<< word
它的作用是向文件描述符n
输出一个字符串,如果n
未指定,则默认为标准输入(STDIN)
。该字符串尾部会被添加换行符
。
举个例子
EXPR='1 + 2'
echo "$EXPR = $(bc <<< $EXPR)"
# 等价于
echo "$EXPR = $(echo "$EXPR" | bc)"
可以看到, 使用内嵌字符串
的形式会更简洁,更优雅一些^_^