Почему «Конец файла» (EOF) является фактическим разделителем для документов здесь?

1

Откуда появилась фраза "Конец файла" для использования здесь с документами?

something <<EOF
something else 1
something else 2
...
EOF

Я предположил, что существует некоторая история, которая могла бы оправдать неинтуитивную предельную строку, и чтение статьи в Википедии было бы недостаточным: почему "файл" все еще пронизывает программы, а потоки и блоки чаще используются для создания здесь документов?

  • 0
    Потому что EOF - это "настоящая вещь", и люди привыкли к этому ...?
  • 1
    Вы использовали python качестве одного из ваших тегов. Здесь документам не нужен разделитель в python так как используются тройные кавычки, вы имели в виду perl ?
Показать ещё 1 комментарий
Теги:
file
heredoc

3 ответа

4
Лучший ответ

Это происходит из традиции Unix, где все является файлом. "Файл" в этом контексте не означает "diskfile" и не обязательно подразумевает какие-либо связанные метаданные - это означает что-то совсем немного ближе к тому, что сейчас называется "потоком". В большинстве случаев "файл" - это "что-то доступное файловым дескриптором". Другими словами, STDIN процесса, который вы порождаете, является файлом, а EOF heredoc отмечает его конец.

3

Поскольку EOF, стоящий для "конца файла", традиционно использовался в качестве имени маркера или исключения, возвращаемого при чтении файла в программе, чтобы указать, что конец файла достигнут. Это очень старое использование.

Поэтому, когда вы пишете здесь документы, и вам нужен токен, чтобы отметить его конец (что должно быть чем-то маловероятным случайно), "EOF" возникает совершенно естественно, если вы привыкли использовать эту фразу для обозначения конечных элементов, файловых маркеров. Так как это использовалось так часто, его подбирают даже люди, которые уже не привыкли думать об EOF, потому что они видят, что они используются в примерах, когда они учатся использовать здесь документы. И поэтому распространение распространяется.

0

Это просто конвенция. В сценариях оболочки вы можете использовать почти все, например,

cat <<stackoverflow
something else 1
something else 2
...
stackoverflow

в bash делает то же самое, как если бы он сказал EOF.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню