EOF в Cat и меньше [дубликат]

На этот вопрос уже есть ответ здесь:

Я новичок в сценариях Linux, сталкиваюсь с некоторыми командами, но не понимаю их.

cat <<- _EOF_
command1
command2
command3
_EOF_

Кроме того,

less <<- _EOF
command1
command2
command3
_EOF

Так может ли кто-нибудь мне их объяснить?

1
задан 8 December 2016 в 04:30

1 ответ

В коде программы необходимо отметить, какие части предназначены, чтобы быть командами и которые предназначены, чтобы быть данными. На типичном типе данных строки, означая последовательности символов (буквы, цифры и т.д.)

Существуют различные способы указать на строковые литералы. Наиболее распространенный способ состоит в том, чтобы заключить строковые данные в кавычки:

PATH="/home/user"
USER='joe'

Но может быть трудно обработать строковые литералы, которые дольше и/или включают разрывы строки:

MESSAGE="This is a relatively long string which isn't represented very well as a typical quoted string.\nAnd there are linebreaks in it."

Для таких случаев, вероятно, требуется смочь сказать: "Рассматривайте следующее как строку, пока я не скажу Вам иначе". И это точно, что здесь делает документ. Это - другой способ показать строковый литерал. Вы определяете маркер, который показывает конец Вашего текста, затем помещает Ваш текст, затем маркер:

MESSAGE=<< EOF
Here be a long string.
With line breaks.
EOF

Вы свободны выбрать маркер, но это обычно - что-то как EOF ("конец файла"), eot ("конец текста") или подобный. Вы, возможно, выбрали "ABC" все равно

MESSAGE=<< ABC
Here be a long string.
With line breaks.
ABC

"Здесь документы", также известный как "heredocs", "здесь-строки" или подобный, произошли в оболочках Unix как bash и может сегодня быть найден на большом количестве языков программирования.

В оболочках они работают немного по-другому, поскольку они не представляют строки так, как они представляют файлы. Так, например

cat << EOF
One
EOF

эквивалентно

cat data.txt # where data.txt contains 'One'

Вариант с <<- вместо' <<' игнорирует ведущий пробел в heredoc данных, таким образом, можно сделать код более читаемым identing heredoc:

cat <<- EOF
  One
  Two
  Three
EOF
6
ответ дан 3 December 2019 в 06:31

Другие вопросы по тегам:

Похожие вопросы: