Cat 中的 EOF 及以下

Cat 中的 EOF 及以下

我是 Linux 脚本的新手,我遇到一些命令但我并不理解它们。

cat <<- _EOF_
command1
command2
command3
_EOF_

还,

less <<- _EOF
command1
command2
command3
_EOF

那么,有人可以向我解释一下吗?

答案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

你可以自由选择标记,但通常是这样的末梢血(“文件结束”),欧特(“文本结束”)或类似内容。您也可以选择“ABC”

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

“Here documents”,也称为“heredocs”、“here-strings”或类似名称,起源于 Unix shell,bash如今可以在许多编程语言中找到。

在 shell 中,它们的工作方式略有不同,因为它们表示的不是字符串,而是文件.例如

cat << EOF
One
EOF

相当于

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

使用 '<<' 代替的变体会<<-忽略 heredoc 数据中的前导空格,因此您可以通过识别 heredoc 使您的代码更具可读性:

cat <<- EOF
  One
  Two
  Three
EOF

相关内容