zoukankan      html  css  js  c++  java
  • shell基础之EOF的用法

    一、EOF的用法

    EOF是(END Of File)的缩写,表示自定义终止符。既然自定义,那么EOF就不是固定的,可以随意设置别名,在linuxctrl-d 就代表EOF

    EOF一般会配合cat能够多行文本输出。

    其用法如下:

    <<EOF        #开始

    ....                  #输入内容

    EOF            #结束

    还可以自定义,比如自定义:

    <<ABC        #开始

    ....

    ABC              #结束

    通过cat配合重定向能够生成文件并追加操作,在它之前先熟悉几个特殊符号

    <:输入重定向

    >:输出重定向

    >>:输出重定向,进行追加,不会覆盖之前内容

    <<:标准输入来自命令行的一对分隔号的中间内容

    例子1

    [root@ren5 ~]# cat <<EOF

    > hello

    > EOF

    hello

    我们知道cat的操作对象是文件,但是例1cat的操作对象不是文件,而是用户输入;那么我们可以这样理解例1:先在文件file中输入“Hello”,再用cat file输出其中的内容。

    也就是说我们可以用一个文件来替代"<< EOF EOF"

    反过来说,如果操作命令中的文件是输入对象,也可以用"<< EOF EOF"来替代的。

    例子2

    [root@ren5 ~]# cat 1.txt

    abc

    [root@ren5 ~]# cat <<EOF > 1.txt             #向文件1.txt输入覆盖内容(也可以:cat > 1.txt <<EOF

    > 123

    > 456

    > 678

    > LOL

    > EOF

    [root@ren5 ~]# cat 1.txt

    123

    456

    678

    LOL

    << EOF EOF”的作用是在命令执行过程中用户自定义输入,它类似于起到一个临时文件的作用,只是比使用文件更方便灵活。

    二、cat <<EOF 与 cat <<-EOF 的区别

    两个都是获取stdin,并在EOF处结束stdin,输出stdout

    在我们使用cat <<EOF时,我们输入完成后,需要在一个新的一行输入EOF结束stdin的输入。EOF必须顶行写,前面不能用制表符或者空格。

    如果重定向的操作符是<<-,那么分界符(EOF)所在行的开头部分的制表符(Tab)都将被去除。这可以解决由于脚本中的自然缩进产生的制表符

    例子1

    [root@ren5 ~]# cat 2.sh

    #!/bin/bash

    cat <<EOF

    你好,EOF

    EOF

    [root@ren5 ~]# sh 2.sh

    你好,EOF

    [root@ren5 ~]# sh 2.sh

    2.sh:4: 警告:立即文档在第 2 行被文件结束符分隔 (需要 `EOF')

    你好,EOF

          EOF

    如果结束分解符EOF前有制表符或者空格,则EOF不会被当做结束分界符,只会继续被当做stdin来输入。

    例子2

    [root@ren5 ~]# cat 2.sh

    #!/bin/bash

    cat <<-EOF

    你好,EOF

          EOF

    [root@ren5 ~]# sh 2.sh

    你好,EOF

    虽然最后的EOF前面有多个制表符和空格,但仍然会被当做结束分界符,表示stdin的结束。

  • 相关阅读:
    NET 2.0(C#)调用ffmpeg处理视频的方法(转载)
    ffmpeg编解码详细过程(转载)
    使用FFMPEG SDK解码流数据
    FFMPEG解码流程
    web worker,SSE,WebSocket,AJAX 与后端交互的方式
    jQuery基础篇
    Git的基本命令介绍
    项目配置中 提示access denied的问题 解决方案
    http网络协议 学习摘要
    OSI七层模型 学习摘要
  • 原文地址:https://www.cnblogs.com/renyz/p/11373525.html
Copyright © 2011-2022 走看看