自定义终结符:EOF

1.EOF

在平时使用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

这个例子和上面那个例子的效果是一样的,<<后面可以跟任何字符。

2.<

前面我们说了<一般跟cat搭配,那么<<-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
# 以上会执行成功

你可能感兴趣的:(shell,linux,运维)