Here Document语法

在 Linux 中,使用 cat > filename <<EOL 是一种 Here Document 语法,用来将多行文本输入保存到文件中。<<EOL 的作用是告诉 shell 输入将一直持续,直到遇到一个特殊的结束标识符(在这里是 EOL),然后把这些输入写入文件。

语法解释:

cat > filename <<EOL
内容...

EOL
  • cat > 1.json:表示将输入内容重定向到 1.json 文件中。如果文件已存在,它会被覆盖。
  • <<EOL:这是 Here Document 的开始,表示从当前行开始,直到遇到 EOL 作为结束标识符。EOL 只是一个示例名称,任何字符串都可以作为结束标识符,比如 <<EOF<<END
  • EOL(或其他标识符):表示 Here Document 的结束,遇到这个标识符后,shell 停止读取输入并写入文件。

示例:

假设想创建一个 JSON 文件 1.json,可以使用以下命令:

cat > 1.json <<EOL
{
  "name": "John",
  "age": 30,
  "city": "New York"
}
EOL

这个命令将创建一个 1.json 文件,内容如下:

{
  "name": "John",
  "age": 30,
  "city": "New York"
}

当输入内容并遇到 EOL 标识符时,输入结束,文件内容保存。

使用场景:

  • 快速创建文件:无需手动编辑文件,通过命令行一次性输入多行数据到文件中。
  • 脚本中使用:可以在 shell 脚本中使用 Here Document 生成多行配置文件、JSON 文件等。

注意事项:

  1. 标识符名称EOL 可以替换为任意标识符,例如 EOFEND,只要确保开始和结束的标识符一致即可。
  2. 覆盖文件:使用 cat > 会覆盖目标文件的内容。如果希望追加而不是覆盖,可以使用 cat >> filename

Here Document 的基本语法

command <<END
多行输入内容
END
  • command:任何可以接受输入的命令(例如 catechogrep 等)。
  • <<END<< 是 Here Document 的起始符号,END 是定义的结束标识符。你可以用任意字符串代替 END,例如 EOFEOL 等。
  • END(或其他标识符):结束标识符,表示输入内容的终止。

示例:

  1. grep 命令提供多行输入

    grep "Linux" <<EOF
    I love Linux.
    Linux is powerful.
    EOF
    

    这会在 Here Document 中查找包含 “Linux” 的行,并输出:

    I love Linux.
    Linux is powerful.
    
  2. 在脚本中使用 Here Document: Here Document 非常适合在脚本中嵌入多行配置文件、脚本或指令。例如,在 shell 脚本中嵌入 SQL 语句:

    mysql -u user -p <<EOF
    USE my_database;
    SELECT * FROM my_table;
    EOF
    

特殊用法:

  • 抑制变量替换:在 << 后使用 <<'END',可以防止 Here Document 中的变量被替换。

    cat <<'EOF'
    This is $HOME
    EOF
    

    输出:

    This is $HOME