`
febird
  • 浏览: 254283 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

终于可以优雅的捕获 shell heredoc 内容了

阅读更多
eval 'var=`cat`' <<"+EOF"
   终于可以用这种方式捕获 heredoc 的内容了
   我太高兴了!
   原先那种方式:
var=`cat << "+EOF2"
     heredoc content
EOF2
`
   不光麻烦,而且会出问题,如果正文中出现一个未被引号引起来的`就挂了
   用 $(cat ...) 的方式也一样不好
+EOF

echo "$var"

 

旧的那篇:shell heredoc 微妙之处

 

这种写法主要解决的问题是:避免了嵌套结构,于是 heredoc 的语法解析细节就和外层的shell调用(`..`或者$(..))毫不相干了。

这种写法为什么可以正确地工作?因为eval引入了一个子结构,这样eval ... 作为一个整体来接受输入,不管它是 heredoc 还是别的什么,比如也可以是一个文件重定向(eval 'var=`cat`' < file)。

因为 shell 的管道语法限制了数据流的方向,只能从左向右,而 heredoc 的数据流却是从右向左,于是,事情就变得有点复杂了( eval 'var=`cat`' ... 算得上复杂吗?)。

 

分享到:
评论

相关推荐

    shell_ftp实现

    - `这是Shell脚本中的here文档(heredoc),用来传递多行输入给命令或程序。 2. **连接FTP服务器**: - `open 10.1.128.112 3839`: 使用`open`命令连接到FTP服务器,其中`10.1.128.112`是服务器的IP地址,而`3839...

    shell 和 XFtp6

    Shell是Linux和Unix操作系统中的命令解释器,它提供了一个用户与操作系统内核交互的界面,让用户可以通过文本命令来执行各种操作。Shell不仅是一个命令行接口(CLI),还是一种强大的编程语言,允许用户编写脚本自动...

    shell 基本语法

    注释通常以`#`符号开头,在此之后的内容会被Shell解释器忽略。 **示例代码:** ```sh #!/bin/sh # 这是一条注释,用于描述脚本的功能或注意事项 echo "Hello, World!" ``` #### 二、变量赋值和引用 在Shell脚本中...

    PHP EOF(heredoc) 使用说明

    PHP EOF(heredoc)是一种在命令行shell(如sh、csh、ksh、bash、PowerShell和zsh)和程序语言(像Perl、PHP、Python和Ruby)里定义一个字符串的方法。 使用概述: 1. 必须后接分号,否则编译通不过。 2. EOF 可以用...

    编的一个linux Shell ,能实现管道,重定向,以及一些基本的Shell 编程功能.zip

    虽然两者之间直接的关系不明显,但你可以考虑使用C#编写一个命令行应用程序,实现类似Shell的功能,这将涉及到进程管理和I/O操作等C#编程知识。 总结来说,你创建的这个Linux Shell项目涵盖了命令行工具的核心要素...

    php中heredoc与nowdoc介绍

    Nowdoc的语法跟Heredoc非常类似,主要区别在于Nowdoc的内容不会被解析,无论是变量还是特殊字符。Nowdoc使用单引号来界定开始标签和结束标签,格式如下: ```php $v = 2; $a = "abc" $v "123" EOT; echo $a; ``` ...

    Filter-Heredoc:Filter-Heredoc 的只读发布历史

    Filter::Heredoc 从符合 POSIX IEEE Std 1003.1-2008 的 shell 脚本中提取此处的文档。 Perl 派生出类似的 here 文档语法,但同时在许多细节上有所不同。 Perls here 文档将被支持,但在初始版本中是实验性的。概要...

    解析php中heredoc的使用方法

    这是一个heredoc字符串,可以包含多行文本。 它能够解析变量,例如{$var}。 EOT; ``` 在这个例子中,EOT就是我们定义的标识符。开始标识符和结束标识符必须相同,并且标识符必须顶头书写,不带任何前导空格或缩进。...

    PHP中nowdoc和heredoc使用需要注意的一点

    nowdoc类似于heredoc,但其内容不会被解析,即它不会执行变量替换或转义特殊字符。这使得nowdoc成为插入大量原始文本(如HTML模板、JSON数据等)的理想选择,确保了内容的原始性。nowdoc的基本形式如下: ```php $...

    Linux详细教程大全之shell脚本基础4-管道IO重定向等.docx

    在Linux系统中,shell脚本是一种强大的自动化工具,它允许用户编写一系列命令以实现特定的任务。这篇文档主要讲解了shell脚本的基础知识,包括管道、标准IO重定向以及脚本调试等关键概念。 1. **管道**: 管道是...

    heredoc:npm模块

    Heredoc JavaScript的多行字符串 用法 该技术利用了Function.prototype.toString() var heredoc = require ( 'heredoc' ) var str = heredoc ( function ( ) { /* within this comment block, any text will ...

    heredoc-matlab:MATLAB 的 Heredoc 解决方案允许轻松操作多行字符串-matlab开发

    MATLAB 的一个长期问题是多行字符串的处理。 例如,嵌入式 SQL 查询: sql = [ 'SELECT * FROM tbl1' ... 'INNER JOIN tbl2' ... 哎呀我们忘了这里的... 该工具允许使用与 Unix shell 和/或 Python 类似的语法将这些

    php heredoc和phpwind的模板技术使用方法小结

    通过Heredoc,可以方便地嵌入变量和多行文本,同时配合注释技巧,使得模板文件在可视化编辑器中易于维护和设计。然而,这种方法仍然依赖于PHP代码的执行,无法实现真正的静态HTML分离,但在实际开发中,尤其对于小型...

    Multi-line-strings-called-Heredoc-:编程中的多行字符串通常称为“ Heredocs”

    当我们需要在变量,函数或注释的内容上添加一些段落时,必须在总文本内容的开头和结尾处使用三个引号。 如果我们使用单引号,则Python的解释器将引发错误。 让我们来看一个例子! paragraph = "Nullam id dolor id...

    Ruby自学笔记

    在操作变量时,如果需要给变量设置初始值,可以使用rescue语句捕获异常,例如将字符串转换为整数时,如果转换失败则赋予默认值0。另外,还可以使用逻辑与(&&)操作来检测数组中是否真正存在某个元素,然后为其赋值。 ...

    mintpl:支持内联 heredoc 模板的迷你 Javascript 模板引擎

    它首先将`heredoc`模板转换为内部可以处理的格式,然后在渲染时根据数据对象动态生成HTML内容。这种过程通常包括以下步骤: 1. **预处理**:解析模板字符串,找到所有`${expression}`部分,并存储为模板片段和...

    vim-ruby-heredoc-syntax:vim插件,用于在ruby here文档中高亮显示代码

    vim-ruby-heredoc语法这样可以在Ruby此处的文档代码块中突出显示语法。安装使用neobundle.vim: NeoBundle ' joker1007/vim-ruby-heredoc-syntax '对于neosnippet和context_filetype 如果您有context_filetype.vim...

Global site tag (gtag.js) - Google Analytics