Shell下多行字符串的变量定义

直接输出到文件

纯文本, 文本当中没有任何变量

  1. # use '>' 表示清除原文件,并进行追加操作, use '>>' 表示追加操作
  2. FILE="~/www.txt"
  3. cat > ${FILE} <<- EOF
  4. www.qq.com
  5. www.google.com
  6. EOF
  7. # or
  8. cat > ${FILE} <<- 'EOF'
  9. www.qq.com
  10. www.google.com
  11. EOF

文本当中带有变量

  1. qq="www.qq.com"
  2. google="www.google.com"
  3. VAR='~/var.txt'
  4. cat > ${VAR} <<- EOF
  5. ${qq}
  6. ${google}
  7. EOF
  8. cat > ${VAR} <<- 'EOF'
  9. ${qq}
  10. ${google}
  11. EOF

注意: 上面两个文件的内容是不一样的, 对于第一种方式, 会将变量全部解析, 如果变量未定义, 则使用 “” 替换变量, 对于方 式二, 不会解析变量, 直接是纯文本的方式写入.

输出到变量中, 即为变量赋值

read 的方式

  1. read -r -d '' var <<- EOF
  2. this is line 1
  3. this is line 2
  4. EOF
  5. read -r -d '' var <<- 'EOF'
  6. this is line 1
  7. this is line 2
  8. EOF

使用 EOF‘EOF’ 的区别和上面的区别是一样的.

cat 的方式

  1. var=$(cat <<- EOF
  2. this is line 1
  3. this is line 2
  4. EOF
  5. )
  6. var=$(cat <<- 'EOF'
  7. this is line 1
  8. this is line 2
  9. EOF
  10. )

使用 EOF‘EOF’ 的区别和上面的区别是一样的.
发布于 2020-11-28 18:10

https://zhuanlan.zhihu.com/p/318011576