from–https://blog.csdn.net/qq_34777982/article/details/126886108
# 直接在shell输出多行字符串
cat << EOF
>aaa
>bbb
>ccc
>ddd
EOF
# 覆盖字符串
cat > /root/abc.txt < EOF
>这个是
>this is
>测试
EOF
# 覆盖字符串 原样输出
cat > /root/abc.txt < ‘EOF’
>aaa
>bbb
>3333
EOF
# 追加多行字符
#说明:这里的EOF没有加单引号,则shell默认会解析特殊字符,如遇$符号解析变量值
cat >> /etc/rc.local << EOF
>菜单大全:
>青椒炒肉丝
>凉拌黄瓜
>我家:$PATH #这里将被解析成环境变量PATH的值
EOF
# 追加字符串 原样输出
# 说明:#用单引号括起来 原样输出字符不解析shell
cat >> /etc/profile << ‘EOF’ #用单引号括起来
>$JAVA_HMOE=/usr/local/java
>PATH=$JAVA_HMOE/bin:$PATH
>export PATH
EOF
#最后这个EOF不需要加单引号,否则shell将识别不了结束符
# 同上,另一种方式
cat << ‘EOF’ >> /etc/profile #把EOF放在前面
>$JAVA_HMOE=/usr/local/java
>PATH=$JAVA_HMOE/bin:$PATH
>export PATH
EOF
#最后这个EOF不需要加单引号,否则shell将识别不了结束符
注意的地方:
EOF加引号和不加引号的区别;
当第一个EOF不加引号时,字符串中的变量或命令会被shell解析,将解析的结果输出;
当第一个EOF加上单引号时,字符串中的变量或者命令不会被shell解析,会将字符串原样输出。