2013-08-30 82 views
11

有一個命令,我不明白:什麼是EOF!在bash腳本中?

custom_command << EOF!! 

我要問EOF!在bash腳本中。我確實發現谷歌EOF,但谷歌會忽略「!!」自動,所以我找不到EOF !!。

我知道文件標記的結尾,但我不完全知道它是什麼意思與「!!」在腳本中。這是一個標誌,迫使某些事情在vim的wq中做一些事情! ?

另外,爲什麼和什麼時候應該使用EOF!而不是EOF?

+0

它是「文件結束」 – Juangcg

+2

http://webapps.stackexchange。COM/Q/1479;不是它會幫助你在這裏... – Ben

+1

[Heredoc](http://en.wikipedia.org/wiki/Here_document)! – devnull

回答

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 
4

您可以使用任何字符串作爲此處的文檔結束符。

EOF!!正是撰寫腳本的人決定使用的。

+0

不,在bash中'EOF !!'會被'EOF <無論你以前的命令是什麼>替換'' – knittl

+2

@knittl它不會,'!!'只能在交互式腳本中被替換。 – jlliagre

+1

對。默認情況下,非交互模式下未啓用歷史記錄展開。 +1。 – devnull

0

正如其他人已經寫,這是這裏的文檔。

用於此的令牌應該仔細選擇;因爲這裏的文件包含EOF!!的概率比EOF本身要低,所以他們選擇了這個概率。

我想他們在使用前檢查了它並沒有傷害;腳本中的!!不引用歷史記錄,但保持原樣。

1

這可能只是一個奇怪的heredoc

例子:

cat << EOF!! 
blabla 
EOF!! 

注:腳本文件這僅適用。命令行解析器解釋爲!!