You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Shell中输入长文本?解决-bash: unexpected token `<`报错

在Shell环境中输入长文本的正确方法(附报错解决)

嘿,我来帮你搞定这个问题!你遇到的 -bash: syntax error near unexpected token '<' 报错,大概率是因为输入长文本的方式不对,Shell误把某些字符当成了命令语法的一部分。下面给你几种实用的解决方案:

1. 用Here Document( heredoc):最常用的多行文本输入方式

这是Shell里处理长文本的标准操作,不管是写入文件还是传给命令都好用。

基本用法

用 << 加上一个自定义的结束标记(比如EOF),然后输入你的长文本,最后单独一行输入结束标记即可:

# 把长文本写入文件
cat > my_long_text.txt <<EOF
这是第一行长文本
第二行可以包含特殊字符,比如 < > & 这些都没问题
第三行甚至可以直接用变量,比如当前用户目录是 $HOME
EOF

让文本原样输出(不展开变量)

如果不想让Shell展开文本里的变量、转义字符,就把结束标记用单引号括起来:

cat > my_raw_text.txt <<'EOF'
这里的$HOME会原样显示,不会被替换成实际路径
甚至可以写`echo "test"`这类命令,也不会被执行
EOF

⚠️ 注意:结束标记必须单独占一行,前后不能有任何空格或其他字符,否则Shell会一直等待你输入真正的结束标记。

2. 用Here String( herestring):适合单行长文本

如果你的长文本是单行的,用 <<< 更简洁,直接把文本作为命令的输入:

# 给grep命令传长文本作为输入
grep "重要关键词" <<< "这是一段超级长的单行文本,里面可以包含各种符号,不需要担心换行问题,直接用<<<就能快速传给命令处理"

3. 反斜杠换行:临时输入多行命令/文本

如果只是临时在命令行输入多行内容,每一行结尾加反斜杠 \,Shell就会认为命令还没结束,继续等待你输入下一行:

echo "第一行内容 \
第二行内容 \
第三行内容"

⚠️ 注意:反斜杠后面不能有空格,否则会触发语法错误,这也是很多人踩坑的点。

为什么会出现<相关的语法错误?

你遇到的报错,通常是因为:

  • 输入多行时没加反斜杠,Shell把下一行的<当成了意外的重定向符号;
  • 误写了重定向语法(比如只写了<却没指定输入文件);
  • heredoc的结束标记格式不对,导致Shell误解析了文本里的<。

按照上面的方法来,就能避免这类问题啦!

内容的提问来源于stack exchange,提问作者Tinler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:01:39