如何使用
cat
命令以及 shell 脚本内的此处文档创建文件”
#!/bin/bash
create_file () {
cat > a.txt << EOF
0 abc def
ghi jkl mno
pqrs tuv wxyz
EOF
}
create_file
错误
Syntax error: end of file unexpected (expecting "}")
打开EOF后删除缩进:
#!/bin/bash
create_file () {
cat > a.txt <<EOF
0 abc def
ghi jkl mno
pqrs tuv wxyz
EOF
}
create_file
Bash 会查找与您开始时相同的“分隔符”。您以“EOF”开头,但在使用缩进时以“____EOF”结尾,因此它无法匹配结束分隔符
如果要为结果文本添加间距,请向文本添加缩进,但将 EOF 保留在行首:
#!/bin/bash
create_file () {
cat > a.txt <<EOF
0 abc def
ghi jkl mno
pqrs tuv wxyz
EOF
}
create_file
此处文档结束的行必须与您在此处文档开头指定的字符串完全匹配。因此,您可以清楚地缩进代码,执行以下操作:
-
之后添加 <<
以告诉 bash 忽略此处文档中的前导制表符(并且仅是制表符,而不是所有空格):
#!/bin/bash
create_file () {
cat > a.txt <<- ' EOF'
0 abc def
ghi jkl mno
pqrs tuv wxyz
EOF
}
create_file
所以上面的这里文档中重要的空格被拼写出来是:
cat > a.txt <<- '<blank><blank><blank><blank>EOF'
<tab>0 abc def
<tab>ghi jkl mno
<tab>pqrs tuv wxyz
<blank><blank><blank><blank>EOF
它将创建这个没有前导空格的文件:
0 abc def
ghi jkl mno
pqrs tuv wxyz
如果您复制/粘贴上面的内容并输出一个带有前导空格的文件,那是因为您忘记将该网站在此处文档中显示的空白转换为真实代码的制表符。