(转)linux shell 的here document 用法 (cat << EOF)

摘要:
例如,如果在终端中输入cat<<EOF,系统将提示您继续输入。输入多行信息,然后输入EOF。中间输入的信息将显示在屏幕上。

什么是Here Documen:
Here Document 是在Linux Shell 中的一种特殊的重定向方式,它的基本的形式如下

cmd << delimiter
  Here Document Content
delimiter

它的作用就是将两个 delimiter 之间的内容(Here Document Content 部分) 传递给cmd 作为输入参数。

比如在终端中输入cat << EOF ,系统会提示继续进行输入,输入多行信息再输入EOF,中间输入的信息将会显示在屏幕上。如下:

fish@mangos:~$ cat << EOF
> First Line
> Second Line
> Third Line EOF
> EOF
First Line
Second Line
Third Line EOF

注: >这个符号是终端产生的提示输入信息的标识符

这里要注意几点

EOF 只是一个标识而已,可以替换成任意的合法字符
作为结尾的delimiter一定要顶格写,前面不能有任何字符
作为结尾的delimiter后面也不能有任何的字符(包括空格)
作为起始的delimiter前后的空格会被省略掉
Here Document 不仅可以在终端上使用,在shell 文件中也可以使用,例如下面的here.sh 文件

cat << EOF > output.sh
echo "hello"
echo "world"
EOF

使用 sh here.sh 运行这个脚本文件,会得到output.sh 这个新文件,里面的内容如下

echo "hello"
echo "world"

Here Document的变形
delimiter 与变量 在Here Document 的内容中,不仅可以包括普通的字符,还可以在里面使用变量,例如将上面的here.sh 改为

cat << EOF > output.sh
echo "This is output"
echo $1
EOF

使用sh here.sh HereDocument 运行脚本得到output.sh的内容

echo "This is output"
echo HereDocument

在这里 $1 被展开成为了脚本的参数 HereDocument

但是有时候不想展开这个变量怎么办呢,可以通过在起始的 delimiter的前后添加 " 来实现,例如将上面的here.sh 改为

cat << "EOF" > output.sh  #注意引号
echo "hello"
echo "world"
EOF

得到的output.sh 的内容为

echo "This is output"
echo $1

原文地址:https://my.oschina.net/u/1032146/blog/146941

免责声明:文章转载自《(转)linux shell 的here document 用法 (cat &amp;lt;&amp;lt; EOF)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇磁盘配额Java正则表达式入门下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Spark2.1集群安装(standalone模式)

机器部署   准备三台Linux服务器,安装好JDK1.7 下载Spark安装包   上传spark-2.1.0-bin-hadoop2.6.tgz安装包到Linux(intsmaze-131)上   解压安装包到指定位置tar -zxvf spark-2.1.0-bin-hadoop2.6.tgz -C /home/hadoop/app/spark2.0...

Jenkins的Pipeline脚本在美团餐饮SaaS中的实践

一、背景 在日常开发中,我们经常会有发布需求,而且还会遇到各种环境,比如:线上环境(Online),模拟环境(Staging),开发环境(Dev)等。最简单的就是手动构建、上传服务器,但这种方式太过于繁琐,使用持续集成可以完美地解决这个问题,推荐了解一下Jenkins。Jenkins构建也有很多种方式,现在使用比较多的是自由风格的软件项目(Jenkins...

Jenkins 调用 Shell 脚本

1. 准备好脚本实现传参 [root@jenkins-client opt]# chmod +x test.sh [root@jenkins-client opt]# cat ^C [root@jenkins-client opt]# cat test.sh #!/bin/bash echo "hehe" echo "$1" 2. jenkins 项目...

Tomcat配置https环境(Windows+Linux)

[-] 1进入到jdk下的bin目录 2输入如下指令keytool -v -genkey -alias tomcat -keyalg RSA -keystore dtomcatkeystore 3输入keystore密码 4输入名字组织单位组织市省国家等信息 5输入之后会出现确认的提示 6输入tomcat的主密码 7进入tomcat文件夹 8在seve...

Linux中最大进程数和最大文件数

前言 Linux系统中可以设置关于资源的使用限制,比如:进程数量,文件句柄数,连接数等等。在日常的工作中应该遇到过: -bash: fork: retry: Resource temporarily unavailable 或者 too many open files 这些类似的操作错误,前者是由于当前用户的进程数超出限制,后者由于当前用户的文件打开数超出...

在Linux中监视IO性能

dd命令 iostat命令 理解iostat的各项输出 iostat的应用实例 附:在Windows中监视IO性能 延伸阅读 dd命令 dd其实是工作于比较低层的一个数据拷贝和转换的*nix平台的工具,但是因为dd命令支持*nix平台的一些特殊设备,因此我们可以利用dd命令的这个特性来简单的测试磁盘的性能。 先说一下两个相关的特殊设备...