here文档

u-boot下的mkconfig中使用了

cat << EOF >> config.h

here文档的作用是:把一系列需要从键盘输入的内容,模拟人工输入,一行一行的交给命令处理。

例如:

cat >> config.h << EOF #define CONFIG_BOARDDIR board/$BOARDDIR

#include <config_cmd_defaults.h>

#include <config_defaults.h>

#include <configs/${CONFIG_NAME}.h>

#include <asm/config.h>

EOF

注意两者的区别

cat >> config.h << “EOF”

#define CONFIG_BOARDDIR board/$BOARDDIR

#include <config_cmd_defaults.h>

#include <config_defaults.h>

#include <configs/${CONFIG_NAME}.h>

#include <asm/config.h>

EOF

 

$ tr a-z A-Z <<END_TEXT

> one two three

> uno dos tres

> END_TEXT

ONE TWO THREE

UNO DOS TRES

 

以下引述自:http://www.jsxubar.info/shell-script-here-document.html

一个here document就是一段带有特殊目的的代码段. 它使用I/O重定向的形式将一个命令序列传递到一个交互程序或者命令。

limit string用来界定命令序列的范围. 特殊符号<<用来标识limit string. 这个符号的作用就是将文件的输出重定向到程序或命令的stdin中.
here document看上去是下面这个样子:

#!/bin/bash

interactive-program <<LimitString

command

…

LimitString

选择一个名字非常诡异limit string能够有效的避免命令列表与limit string重名.
结尾的limit string, 就是here document最后一行的limit string, 必须从第一个字符开始. 它的前面不能够有任何前置的空白. 而在这个limit string后边的空白也会引起异常. 空白将会阻止limit string的识别.
-选项用来标记here document的limit string (<<-LimitString), 可以抑制输出时前边的tab(不是空格). 这么做可以增加一个脚本的可读性.

 

在here document的开头, 引用或转义”limit string”, 会使得here document消息体中的参数替换被禁用.
#  cat <<”Endofmessage”
禁用了参数替换后, 将允许输出文本本身. 如果你想产生脚本甚至是程序代码的话, 那么可以使用这种办法.

 

可以将here document的输出保存到变量中.

variable=$(cat <<SETVAR

This variable

runs over multiple lines.

SETVAR)

 

可以这么使用:(冒号), 做一个假命令来从一个here document中接收输出. 这么做事实上就是创建了一个”匿名”的here document. 可以用来”注释”掉代码块. 能够产生”自文档化(self-documenting)”的脚本.

#! /bin/bash

echo "hello world"

: << EOF

balblabla

dingo

EOF

echo "good bye"

对于那些使用”here document”, 并且非常复杂的任务, 最好考虑使用expect脚本语言, 这种语言就是为了达到向交互程序添加输入的目的而量身定做的.

 

====================================================================================

here string可以看成是here document的一种定制形式. 除了COMMAND <<<$WORD, 就什么都没有了, $WORD将被扩展并且被送入COMMAND的stdin中.

引述自:http://linux.die.net/abs-guide/x15683.html

A here string can be considered as a stripped-down form of a here document. It consists of nothing more than COMMAND <<<$WORD, where $WORD is expanded and fed to the stdin of COMMAND.

# Instead of:

if echo "$VAR" | grep -q txt   # if [[ $VAR = *txt* ]]

# etc.


##########################################################################
##########################################################################
# Try:
if grep -q "txt" <<< "$VAR" then echo "$VAR contains the substring sequence \"txt\"" fi # Thank you, Sebastian Kaminski, for the suggestion.

 

String="This is a string of words."



read -r -a Words <<< "$String"

#  The -a option to "read"

#+ assigns the resulting values to successive members of an array.



echo "First word in String is:    ${Words[0]}"   # This

echo "Second word in String is:   ${Words[1]}"   # is

echo "Third word in String is:    ${Words[2]}"   # a

echo "Fourth word in String is:   ${Words[3]}"   # string

echo "Fifth word in String is:    ${Words[4]}"   # of

echo "Sixth word in String is:    ${Words[5]}"   # words.

echo "Seventh word in String is:  ${Words[6]}"   # (null)

                                                 # Past end of $String.



# Thank you, Francisco Lobo, for the suggestion.

 

你可能感兴趣的:(文档)