我是 Linux 脚本的新手,我遇到了一些命令,但我不理解它们。
cat <<- _EOF_
command1
command2
command3
_EOF_
Run Code Online (Sandbox Code Playgroud)
还,
less <<- _EOF
command1
command2
command3
_EOF
Run Code Online (Sandbox Code Playgroud)
那么,谁能给我解释一下?
在程序代码中,您必须标记哪些部分是命令,哪些部分是数据。典型的数据类型是字符串,意思是字符序列(字母、数字等)
有不同的方式来表示字符串文字。最常见的方法是引用字符串数据:
PATH="/home/user"
USER='joe'
Run Code Online (Sandbox Code Playgroud)
但是可能很难处理更长和/或包含换行符的字符串文字:
MESSAGE="This is a relatively long string which isn't represented very well as a typical quoted string.\nAnd there are linebreaks in it."
Run Code Online (Sandbox Code Playgroud)
对于这种情况,您可能希望能够说:“将以下内容视为字符串,直到我告诉您其他情况”。这正是here 文档所做的。这是表示字符串文字的另一种方式。您定义一个表示文本结束的标记,然后放置您的文本,然后是标记:
MESSAGE=<< EOF
Here be a long string.
With line breaks.
EOF
Run Code Online (Sandbox Code Playgroud)
您可以自由选择标记,但它通常类似于EOF(“文件结尾”)、eot(“文本结尾”)或类似内容。你也可以同样选择“ABC”
MESSAGE=<< ABC
Here be a long string.
With line breaks.
ABC
Run Code Online (Sandbox Code Playgroud)
“Here 文档”,也称为“heredocs”、“here-strings”或类似的东西,起源于 Unix shell bash
,今天可以在许多编程语言中找到。
在 shell 中,它们的工作方式略有不同,因为它们表示的字符串不像表示文件那样多。所以,例如
cat << EOF
One
EOF
Run Code Online (Sandbox Code Playgroud)
相当于
cat data.txt # where data.txt contains 'One'
Run Code Online (Sandbox Code Playgroud)
用<<-
代替 `<<'的变体忽略了heredoc 数据中的前导空格,因此您可以通过识别heredoc 使您的代码更具可读性:
cat <<- EOF
One
Two
Three
EOF
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3821 次 |
最近记录: |