【问题标题】:What is EOF!! in the bash script?什么是EOF!!在 bash 脚本中?
【发布时间】:2013-08-30 07:19:17
【问题描述】:

有一个命令我看不懂:

custom_command << EOF!!

我想问什么EOF!!在 bash 脚本中。我确实用谷歌找到了EOF,但谷歌会忽略“!!”自动,所以我找不到EOF !!。

我知道文件标记的结尾,但我不知道“!!”是什么意思在脚本中。这是强制执行某些操作的标记吗,例如在 vim 的 wq 中! ?

另外,我们为什么以及何时应该使用 EOF!而不是 EOF?

【问题讨论】:

  • webapps.stackexchange.com/q/1479;并不是说它会在这里帮助你......
  • 我知道“EOF”,但我不懂“EOF!!”
  • 嗯.. 没有意义。你在哪里见过这个?请发布完整的示例。另外:没有“文件结束标记”之类的东西。

标签: linux bash shell unix


【解决方案1】:

在命令行上,!! 将扩展为最后执行的命令。 Bash 将为您打印该行:

$ ls
a.txt  b.txt
$ cat <<EOF!!
cat <<EOFls
>

不过,在脚本中,历史扩展默认是禁用的,所以感叹号是单词的一部分。

#! /bin/bash
ls
cat <<EOF!!
echo 1
EOFls
echo 2

生产:

a.txt  b.txt
script.sh: line 7: warning: here-document at line 3 delimited by end-of-file (wanted `EOF!!')
echo 1
EOFls
echo 2

要在脚本中启用历史和历史扩展,请添加以下行:

set -o history
set -H

【讨论】:

    【解决方案2】:

    您可以使用任何字符串作为此处的文档终止符。

    EOF!! 正是编写脚本的人决定使用的。

    【讨论】:

    • 否,在 bash 中 EOF!! 将被替换为 EOF&lt;whatever your previous command was&gt;
    • @knittl 不会的,!! 只会在交互式脚本中被替换。
    • 对。默认情况下,非交互模式下不启用历史扩展。 +1。
    【解决方案3】:

    这可能只是一个奇怪的heredoc

    例子:

    cat << EOF!!
    blabla
    EOF!!
    

    注意:这只适用于脚本文件。命令行解析器解释!!

    【讨论】:

      【解决方案4】:

      正如其他人已经写的那样,这是一个此处的文档。

      应谨慎选择用于此的令牌;由于 here-document 包含 EOF!! 的概率低于 EOF 本身的概率,因此他们选择了它。

      我想他们在使用它之前检查过它是否无害;脚本中的!! 不引用历史记录,但它保持原样。

      【讨论】:

        【解决方案5】:

        The bash manual 将此列在"Event designators" 下,并表示:

        !!

        参考上一条命令。这是 !-1` 的同义词。

        我只是搜索了“bash 手动双感叹号”。

        【讨论】:

          猜你喜欢
          • 2021-11-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-10-03
          • 1970-01-01
          • 1970-01-01
          • 2012-04-19
          相关资源
          最近更新 更多