linux 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 "hello"echo "world"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? 变为 ?-

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

参考链接

Wiki: Here Document

Learn Linux, 101: Streams, pipes, and redirects

时间: 2024-12-27 22:44:33

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

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/

Linux Shell之八 转向的用法

一.文件代码 "转向"的意思是说:原本应由标准输入(如键盘)读取数据的,改由其它文件读取:原本应把结果显示在标准输出(如屏幕)的,改输出到其它文件.在这个过程中会涉及到文件代码(file descriptor)的概念. 所谓文件代码,是指操作系统赋予已开启文件一个编号(由0开始),作为追踪文件之用,如对这个文件进行读取或写入的操作,都使用文件代码来沟通.下边文件代码数字用fd来表示. 操作系统默认3个文件代码:0 标准输入.1 标准输出.2 标准错误  这3个文件在建立Shell环境时

Linux shell 的 test 命令用法详解

基本格式:test expression expression为test命令构造的表达式.这里expression是test命令可以理解的任何有效表达式,该简化格式将是读者可能会踫见的最常用格式返回值:test命令或者返回0(真) 或者返回1(假). test可理解的表达式类型分为四类: 表达式判断 字符串比较 数字比较 文件比较 1)判断表达式 if test  (表达式为真)if test !表达式为假test 表达式1 –a 表达式 2                两个表达式都为真tes

linux shell中shift的用法

位置参数可以用shift命令左移.比如shift 3表示原来的$4现在变成$1,原来的$5现在变成$2等等,原来的$1.$2.$3丢弃,$0不移动.不带参数的shift命令相当于shift 1. 非常有用的 Unix 命令:shift.我们知道,对于位置变量或命令行参数,其个数必须是确定的,或者当 Shell 程序不知道其个数时,可以把所有参数一起赋值给变量$*.若用户要求 Shell 在不知道位置变量个数的情况下,还能逐个的把参数一一处理,也就是在 $1 后为 $2,在 $2 后面为 $3 等

Linux Shell:Map的用法

Map定义: 在使用map时,需要先声明,否则结果可能与预期不同,array可以不声明 方式1: declare -A myMap myMap["my03"]="03" 方式2: declare -A myMap=(["my01"]="01" ["my02"]="02") myMap["my03"]="03" myMap["my04&qu

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 <<

linux shell 编程

一.Linux中变量$#,[email protected],$0,$1,$2,$*,$$,$?的含义: 可以通过脚本测试来区分这几个变量的具体作用和用法. 脚本如下: # vim variable #!/bin/sh echo "number:$#" echo "scname:$0" echo "first :$1" echo "second:$2" echo "argume:[email protected]&q