什么是EOF !!在bash脚本中?

时间:2013-08-30 07:19:17

标签: linux bash shell unix

有一个我不明白的命令:

custom_command << EOF!!

我想问一下EOF !!在bash脚本中。我确实找到了谷歌的EOF,但谷歌将忽略“!!”自动,所以我找不到EOF !!

我知道文件令牌的结束,但我不知道“!!”的意思在脚本中。这是一个标记强迫某事做像vim的wq! ?

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

5 个答案:

答案 0 :(得分:15)

在命令行上,!!将扩展为最后执行的命令。 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

答案 1 :(得分:4)

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

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

答案 2 :(得分:1)

这可能只是一个奇怪的heredoc

示例:

cat << EOF!!
blabla
EOF!!

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

答案 3 :(得分:0)

正如其他人已经写过的那样,这是一份文件。

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

我认为他们在使用之前检查过它没有伤害;脚本中的!!不会引用历史记录,但会保持原样。

答案 4 :(得分:-1)

The bash manual"Event designators"下列出了这一点,并说:

  

!!

     

请参阅上一个命令。这是!-1`。

的同义词

我只是搜索“bash manual double exclamation”。