- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一组 Bash 脚本,希望能够解析它们以提取它们的定义。
如果我在脚本中形成我的描述 (ab) 使用 heredocs 作为评论 block ,如下所示,这会带来任何好处吗:
#!/bin/bash
DESCRIPTION = <<EOD
This nifty script does x, y and sometimes z
EOD
# rest of script...
结束:
#!/bin/bash
# Description
# ==========
#
# This nifty script does x, y and sometimes z
# rest of script...
即,是否有一种简单的方法可以让我从 Bash 脚本中提取变量,或者我是否需要编写脚本来解析文件以从 # Description
到格式正确的描述 block 下一个空行?
更新
对此有很多很好的答案。我选择了最适合我的用例和偏好的那个,但它们都是 Bash 注释实现的绝佳示例。
最佳答案
在提取信息的难度方面没有实际差异。注释具有不可执行的轻微好处,因此不创建 $DESCRIPTION
变量具有边际性能优势,但您很难衡量它。
当然,还有一个额外的问题,即为 heredoc 显示的语法不是有效的 shell。您需要考虑以下方面:
cat >/dev/null <<EOD
...
EOD
或者也许(但也许不是 — 除非您想在脚本本身中使用 $DESCRIPTION
):
DESCRIPTION=$(cat <<EOD
...
EOD
)
或者,也许更好:
: DESCRIPTION = <<EOD
...
EOD
冒号命令是空操作;它评估其论点并成功。我更喜欢这个而不是任何一个 cat
变体。 DESCRIPTION
和 =
参数是干扰词;您可以在不影响脚本的情况下省略其中一个或两个。您可能也想考虑在第一个 EOD
周围使用引号:
: <<'EOD'
...$(cat this is not executed)...
EOD
请注意,:
命令和第一个 cat
替代项不会初始化 shell 变量 $DESCRIPTION
。如果这很重要,您将坚持使用命令替换 $(...)
版本,注意有两行标记分配的结束。
关于bash - 解析 BASH 脚本中的 heredoc 注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20206413/
我在 php 脚本中有类似的东西: > $logFile > $logFile > $logFile > test.log > test.log <
我需要在没有任何格式的网页上显示 bash 脚本。 bash 脚本使用标准的“此处文档”块。当我尝试使用 PHP heredoc 函数输出脚本时,它会在遇到 ' #!/bin/sh rm /tmp/b
这个问题在这里已经有了答案: Does Java have support for multiline strings? (44 个答案) 关闭 7 年前。 对于 JAVA 开发,我需要写入带有“\
我知道这里有很多关于 heredocs 以及重定向和文件描述符的帖子,但我似乎找不到与我想做的事情相关的任何内容。 我想打开一个文件描述符到一个文件,然后将 heredoc 写入该文件描述符。 这是我
我刚刚开始阅读 O'Reilly 关于 PHP、MySQL 和 JavaScript 的书,并且刚刚进入学习 heredocs 的阶段。它在书中说他们按字面意思保留文本,但我的根本没有。我什至完全按照
使用下面的代码,我希望看到显示 5 个单独的行。相反,它将所有内容都放在一行上......没有制表符,没有前导空格,没有空行。出乎我的意料。 查看其他代码后,程序员插入了一系列我尝试过的 's(使用
在这里,我试图在 bash 中声明一个具有多行值的变量: $ GET="$(cat GET / HTTP/1.1 > Host: 127.0.0.1:80 > > EOF > )" 这肯定有效,但是
对于我从事的个人发展和项目,我们使用四个空格而不是制表符。但是,我需要使用 heredoc,而且我不能在不破坏缩进流的情况下这样做。 我能想到的唯一可行的方法是: usage() { cat
我正在尝试将一个数组元素传递给 heredoc,目标是生成一个文件,例如: declare -a box=("element1" "element2" "element3") cat > test.t
我正在为没有 bash 经验的 friend 编写脚本。该脚本生成一个备份脚本,生成一个 crontab 并运行 crontab 以创建一个 cron 作业。 我想为这些备份添加日期,因此当前脚本(相
这里有人可以探索使用 heredoc 的复杂性吗?在 PHP 中使用示例 PHP 代码片段,基于手册下面的内容? php.net 手册说: It is very important to note t
这个问题在这里已经有了答案: Why do these Heredoc and Nowdoc cause errors? (6 个答案) 关闭 7 年前。 我正在使用 Heredoc 将非常大的 H
我正在为 Controller 方法编写代码,我需要用它来发送电子邮件。我正在尝试使用 heredoc 语法来填写电子邮件正文,但是,似乎无法识别结束标记。 $this->email = new Em
我正在尝试用 heredoc 语句替换 HTML 代码。但是,我在最后一行收到解析错误。我确信我没有在 heredoc 结束标记行上留下任何前导空格或缩进。以下是代码的一部分: $table =
我想使用 irb 和一个 HTML 页面做一些正则表达式测试,我正试图 gsub 一些东西。 然而,我们都知道和喜爱的 HEREDOC 语法在 Ruby 中似乎有所不同: irb(main):140:
我喜欢 HEREDOC 语法,例如对于不值得放入模板的生成 HTML 的边缘情况。 不过,唯一让我恼火的是内容和 heredoc 字符串的结束标记紧贴第一列。这搞砸了嵌套代码布局: class myc
这个不起眼的终端功能在紧要关头提供一个文本编辑器。 在 Linux 和 Unix 的 shell 中有一个不为人知的功能,它能让你用 cat 命令打开一个 do-w
代码示例: create_data_with( first: "Lorem ipsum dolor sit amet, consectetur adipiscing elit.", secon
假设我在我的类中有一个名为 $_staticVar 的静态变量,我正试图像这样访问它。该变量有一个成员 aString,它的字符串值为 "my static variable" echo Th
$js = <<
我是一名优秀的程序员,十分优秀!