有一个命令我不明白:
custom_command << EOF!!
我想问什么EOF!!在 bash 脚本中。我确实用谷歌找到了EOF,但谷歌会忽略“!!” 自动,所以我找不到EOF !!。
我知道文件标记的结尾,但我不完全知道“!!”是什么意思 在脚本中。这是强制执行某些操作的标记吗,例如在 vim 的 wq 中!?
另外,我们为什么以及何时应该使用 EOF!!而不是EOF?
在命令行上,!!
将扩展为最后执行的命令。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
您可以使用任何字符串作为此处的文档终止符。
EOF!!
正是编写脚本的人决定使用的。
正如其他人已经写的那样,这是一个here-document。
应谨慎选择用于此目的的代币;由于此处文档包含的概率EOF!!
低于EOF
其自身的概率,因此他们选择了它。
我想他们在使用它之前检查了它是否有害;!!
在脚本中并不引用历史,但它保持原样。