在平时使用Shell的时候,我们可能对于EOF
并不陌生,我们经常使用cat > file << EOF
来批量写入文件,但我们其实对于EOF又很陌生,很多人都只知道EOF
有这么一个用法,但其实并不知道EOF
代表什么,EOF其实就是END of File
,自定义终止符,为什么说是自定义呢?往下看就知道了。
cat > file << EOF
input file
EOF
上面的例子是多数人都会使用的批量文本重定向到文件,这是Shell中通常将EOF与 << 结合使用,表示后续的输入作为子命令或子Shell的输入,直到遇到EOF为止,再返回到主调Shell。
为什么这是自定义终结符呢?因为既然是自定义的,那就可以是任何符号
cat > file << E
input file
E
这个例子和上面那个例子的效果是一样的,<<后面可以跟任何字符。
前面我们说了<
<<-EOF
又是什么东西呢?
一般我们在使用cat > file << EOF
的时候,作为终结符的EOF必须顶格写,前面不能有空格什么的,但是cat > file <<- EOF
,就不是这样了,<<-
能把终结符前面的制表符给消除掉,这可以解决由于脚本中的自然缩进产生的制表符。
#!/bin/bash
cat > file << EOF
input file
EOF
# 执行报错:test.sh:行4: 警告:立即文档在第 2 行被文件结束符分隔 (需要 `EOF')
#!/bin/bash
cat > file <<- EOF
input file
EOF
# 以上会执行成功