it-roy-ru.com

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

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

custom_command << EOF!!

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

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

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

12
Marcus Thornton

В командной строке !! будет расширен до последней выполненной команды. Bash напечатает для вас строку:

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

Однако в сценарии расширение истории отключено по умолчанию, поэтому восклицательные знаки являются частью Word.

#! /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
15
choroba

Вы можете использовать любую строку как здесь терминатор документа.

EOF!! - это то, что человек, написавший сценарий, решил использовать.

4
jlliagre

Это, вероятно, просто странный heredoc .

Пример:

cat << EOF!!
blabla
EOF!!

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

1
Karoly Horvath

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

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

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

0
glglgl