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

什么是Here Document

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

cmd << delimiter
  Here Document Content
delimiter

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

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

[email protected]:~$ cat << EOF
> First Line
> Second Line
> Third Line EOF
> EOF
First Line
Second Line
Third Line EOF

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

这里要注意几点

  1. EOF 只是一个标识而已,可以替换成任意的合法字符
  2. 作为结尾的delimiter一定要顶格写,前面不能有任何字符
  3. 作为结尾的delimiter后面也不能有任何的字符(包括空格)
  4. 作为起始的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 "This is output"
echo $1
EOF 

得到的output.sh 的内容为

echo "This is output"
echo $1

Here Document 还有一个用法就是将 ‘<<‘ 变为 ‘<<-‘。 使用 <<- 的唯一变化就是Here Document 的内容部分每行前面的 tab (制表符)将会被删除掉,这种用法是为了编写Here Document的时候可以将内容部分进行缩进,方便阅读代码。

转自:https://my.oschina.net/u/1032146/blog/146941

原文地址:https://www.cnblogs.com/guanbin-529/p/12701543.html

时间: 04-14

shell 的here document 用法 (cat << EOF) (转)的相关文章

linux shell 的here document 用法 (cat &lt;&lt; EOF)

什么是Here Document Here Document 是在Linux Shell 中的一种特殊的重定向方式,它的基本的形式如下 cmd << delimiter   Here Document Content delimiter 它的作用就是将两个 delimiter 之间的内容(Here Document Content 部分) 传递给cmd 作为输入参数. 比如在终端中输入cat << EOF ,系统会提示继续进行输入,输入多行信息再输入EOF,中间输入的信息将会显示在

linux shell的here document用法

转载自: http://my.oschina.net/u/1032146/blog/146941 什么是Here Document?Here Document 是在Linux Shell 中的一种特殊的重定向方式,它的基本的形式如下cmd << delimiter  Here Document Contentdelimiter 其作用是将两个 delimiter 之间的内容(Here Document Content 部分) 传递给cmd 作为输入参数;比如在终端中输入cat <<

shell用法 (cat &lt;&lt; EOF)

下面的语句会创建不存在的secure.config,如果存在直接追加,然后把多行内容: [database]        password = gerrit 写入文件secure.config cat >> secure.config << EOF[database]        password = gerritEOF https://my.oschina.net/u/1032146/blog/146941 https://blog.csdn.net/zongshi1992/

Shell中的cat&lt;&lt;EOF (here document) (转)

Linux shell的here document用法(cat << EOF) 什么是Here Document Here Document 是在Linux Shell 中的一种特殊的重定向方式,它的基本的形式如下 cmd << delimiter Here Document Content delimiter 它的作用就是将两个 delimiter 之间的内容(Here Document Content 部分) 传递给cmd 作为输入参数. 比如在终端中输入cat <<

Shell脚本——cat/EOF输出多行

在某些场合,可能我们需要在脚本中生成一个临时文件,然后把该文件作为最终文件放入目录中.(可参考ntop.spec文件)这样有几个好处,其中之一就是临时文件不是唯一的,可以通过变量赋值,也可根据不同的判断生成不同的最终文件等等.一.cat和EOFcat命令是linux下的一个文本输出命令,通常是用于观看某个文件的内容的:EOF是“end of file”,表示文本结束符.结合这两个标识,即可避免使用多行echo命令的方式,并实现多行输出的结果.二.使用看例子是最快的熟悉方法: # cat <<

shell cat EOF 变量自动解析问题

使用如下shell安装node时,一直提示 command not found wget https://mirrors.huaweicloud.com/nodejs/latest-v8.x/node-v8.16.0-linux-x64.tar.gz tar zxvf node-v8.16.0.tar.gz -C /usr/local cd /usr/local/ mv node* node cat <<EOF> /etc/profile.d/node.sh export NODE_HO

cat &lt;&lt;EOF用法

转自:http://blog.csdn.net/apache0554/article/details/45508631 cat <<EOF和cat <<-EOF两个都是获取stdin,并在EOF处结束stdin,输出stdout. 但是<<-是什么意思呢? 先来看man中的说明: If the redirection operator is <<-, then all leading tab characters are stripped from inpu

shell expect的简单用法【转】

用expect实现自动登录的脚本,网上有很多,可是都没有一个明白的说明,初学者一般都是照抄.收藏.可是为什么要这么写却不知其然.本文用一个最短的例子说明脚本的原理. 脚本代码如下:  ##############################################  #!/usr/bin/expect  set timeout 30  spawn ssh -l username 192.168.1.1  expect "password:"  send "ispa

SHELL STUDY....tr的用法

一般我们使用tr来做字符串的替换,或者删除指定的字符串 tr的语法如下: tr [OPTION]... SET1 [SET2] -c, -C, --complement first complement SET1 将非SET1中的字符替换为SET2 [[email protected] ~]$ echo "lubinsu" | tr -c "l" "A" lAAAAAAA -d, --delete delete characters in SET

cat &lt;&lt;EOF与cat &lt;&lt;-EOF的区别

两个都是获取stdin,并在EOF处结束stdin,输出stdout. 但是<<-是什么意思呢? 先来看man中的说明: If the redirection operator is <<-, then all leading tab characters are stripped from input lines and  the  line  containing  delimiter.    翻译过来的意思就是:如果重定向的操作符是<<-,那么分界符(EOF)所在