我是 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