当前位置:首页>Linux>Linux 新手必踩的坑:cat 和 echo,你真的分清楚了吗?

Linux 新手必踩的坑:cat 和 echo,你真的分清楚了吗?

  • 2026-09-02 17:06:50
Linux 新手必踩的坑:cat 和 echo,你真的分清楚了吗?

你有没有遇到过这种情况:想往文件里写一行字,用 cat 试了半天没反应;或者想看文件内容,却顺手敲了 echo,结果屏幕上只出现了文件的路径本身——然后你一脸懵?

cat 和 echo 是 Linux 里用得最频繁的两个命令,新手几乎每天都在用,但它们之间的区别,真正能说清楚的人不多。这篇文章用最直白的方式,把这两个命令彻底讲透。


echo:嘴巴,只管"说话"

echo 做的事很单纯:把你给它的内容,原封不动地打印出来。

echo "Hello, Linux"
# 输出:Hello, Linux

它最擅长的是输出字符串和变量:

echo $HOME
# 输出:/home/xiong

echo "当前用户是:$USER"
# 输出:当前用户是:xiong

你可以把 echo 理解成一个复读机——你说什么,它就重复什么。它不关心磁盘上有没有文件,它只负责"开口说话"。

加上重定向符号,它也能把话"写"到文件里:

echo "第一行内容" > notes.txt     # 创建(或覆盖)文件
echo "第二行内容" >> notes.txt    # 追加到文件末尾

这是新手最常用的建文件方式,简单粗暴,一行搞定。


cat:搬运工,专门处理文件

cat 的全名是 concatenate(拼接),它的本职工作是读取文件内容,输出到屏幕,或者把多个文件拼成一个。

cat notes.txt
# 输出 notes.txt 里的全部内容

如果你给 cat 两个文件,它会把两个文件的内容顺序拼接起来打印:

cat file1.txt file2.txt
# 先输出 file1 的内容,再输出 file2 的内容

加上重定向,就可以把两个文件合并成一个:

cat file1.txt file2.txt > merged.txt

这就是 cat 名字里"concatenate"的来源——它天生是个文件搬运工,不关心你要写什么字符串,只管搬文件里已有的内容。


核心区别:输入源不一样

这是最关键的一句话,记住了以后就不会再混:

echo 的输入是"你键盘上打的字";cat 的输入是"磁盘上的文件"。

echo
cat
输入来源
字符串 / 变量
文件 / 标准输入
主要用途
打印文本、变量
读取、合并文件
能读文件吗
不能
能
能处理变量吗
能
不能(会当文件名处理)

举个反例,新手很容易犯这个错误:

# 错误:想打印变量内容,却用了 cat
cat $HOME
# 报错:cat: /home/xiong: Is a directory
# 因为 cat 把 $HOME 的值当成了文件路径去找文件了

正确做法当然是 echo $HOME。


不同场景,该用谁?

场景一:往文件写一行简单的文字

用 echo,快准狠。

echo"export PATH=$PATH:/usr/local/bin" >> ~/.bashrc

这是往 .bashrc 里追加环境变量的经典操作,三秒搞定。

场景二:往文件写多行内容(Heredoc)

如果要写的内容超过一行,echo 就开始显得笨拙了。这时候该轮到 cat 配合 Heredoc 语法登场:

cat > config.conf << 'EOF'
[server]
host = 127.0.0.1
port = 8080
debug = true
EOF

<< 'EOF' 是一个"内容块"标记,从这一行到下一个 EOF 之间的所有内容,都会被写进文件。这种写法在自动化脚本里非常常见,比用多个 echo 优雅得多。

场景三:查看文件内容

毫无疑问,cat。

cat /etc/os-release     # 查看系统版本
cat ~/.ssh/id_rsa.pub   # 查看 SSH 公钥

如果文件很长,可以搭配 -n 显示行号,方便定位:

cat -n long_script.sh

场景四:合并多个日志文件

cat 的拿手好戏:

cat access_2025_01.log access_2025_02.log access_2025_03.log > access_Q1.log

三个月的日志,一条命令合并完毕。echo 在这个场景完全帮不上忙。

场景五:Shell 脚本调试

在脚本里插入调试信息,echo 是标配:

#!/bin/bash
echo"开始执行备份任务..."
rsync -av /data /backup
echo"备份完成,退出码:$?"

echo 像是脚本里的"print 语句",随手插,随手删,调试神器。

场景六:从键盘手动输入内容到文件

cat 还有一个冷门用法——不接文件名时,它会从键盘读取输入:

cat > memo.txt
# 此时终端等待输入,你打的所有内容都会写进文件
# 输完按 Ctrl+D 结束

这个用法适合临时记录一小段内容,比打开编辑器快,比写 echo 省事(尤其是内容里有引号的时候不用转义)。


一个常见误区:cat 创建文件 vs echo 创建文件

有人喜欢用 cat /dev/null > file.txt 来清空文件,有人用 echo -n > file.txt,其实最简洁的方式是:

> file.txt   # 直接用重定向,最干净

三种方式效果一样,但明白背后的逻辑,才不会在脚本里写出让同事看不懂的代码。


总结

cat 和 echo 分工明确,互不越界:

  • • 要输出变量、字符串、调试信息 → echo
  • • 要读取文件、合并文件、写多行内容 → cat(配合 Heredoc)

记住那句核心区别:“echo 说话,cat 搬文件”,两者就再也不会混淆。

最新文章

随机文章