Что такое EOF!! в bash-скрипт?

есть команда, которую я не понимаю:

custom_command << EOF!!

Я хочу спросить, что EOF!! это в bash-скрипт. Я нашел EOF с google, но google будет игнорировать "!!- автоматически, так что я не могу найти ЭОФ!!.

Я знаю конец маркера файла, но я точно не знаю, что это значит с "!!"в сценарии. Это знак, чтобы заставить что-то сделать что-то вроде wq vim! ?

плюс, почему и когда мы должны использовать EOF!! вместо EOF?

5 ответов


в командной строке !! будет расширен до последней выполненной команды. 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!! Это то, что человек, пишущий сценарий, решил использовать.


это, вероятно, просто странно heredoc.

пример:

cat << EOF!!
blabla
EOF!!

Примечание: это работает только в файлах скриптов. Синтаксический анализатор командной строки интерпретирует !!.


как уже писали другие, это здесь-документ.

маркер, используемый для этого, должен быть выбран тщательно; как вероятность того, что здесь-документ содержит EOF!! меньше, чем EOF сам, они выбрали это.

Я полагаю, они проверили, что это не повредит, прежде чем использовать его;!! в скрипте не ссылается на историю, но она остается как есть.


руководство bash списки под "целеуказатели мероприятия", говорят:

!!

обратитесь к предыдущей команде. Это синоним !-1`.

Я просто искал "bash ручное двойное восклицание".