echo 命令使用说明(Linux)
适用环境
- Bash/Zsh 等常见 Shell(
echo
通常为内建命令) - 也可能存在外部
/bin/echo
(行为与内建略有差异)
基本语法
echo [选项] [字符串...]
常用选项
-n
: 结尾不输出换行-e
: 解析反斜杠转义(非 POSIX,部分系统默认无效)-E
: 禁用转义解析(通常为默认行为)
说明:不同系统/不同 Shell 对 -e/-E
的支持存在差异;可移植脚本更推荐使用 printf
。
常见转义(配合 -e
)
\n
: 换行\t
: 制表符(Tab)\r
: 回车\a
: 响铃(Beep)\b
: 退格\c
: 结尾不再输出后续内容\e
或\x1b
: ESC(有的实现不支持\e
)\0NNN
: 八进制字符(NNN 为 1-3 位八进制)\xHH
: 十六进制字符(HH 为 1-2 位十六进制)
示例:
echo -e "第一行\n第二行"
echo -e "列1\t列2\t列3"
不换行输出
echo -n "正在处理..."; sleep 1; echo "完成"
重定向输出到文件
- 覆盖写入:
>
- 追加写入:
>>
echo "hello" > file.txt
echo "world" >> file.txt
以 root 权限写入(避免 sudo
只作用于 echo
而非重定向):
echo "配置" | sudo tee /etc/my.conf > /dev/null
多行文本输出
- 使用转义换行:
echo -e "line1\nline2\nline3"
- 推荐使用
printf
(可移植、格式强):
printf "line1\nline2\nline3\n"
- 写入多行到文件(Here-Doc):
cat > notes.txt << 'EOF'
第一行
第二行
包含 $VAR 与 \n 等字符不会被展开
EOF
颜色与高亮(ANSI 转义)
echo -e "\e[31m红色\e[0m 普通 \e[1m加粗\e[0m"
常用颜色码:30-37 前景色,90-97 亮色;40-47 背景色。\e[0m
重置。
变量与命令替换
name="Alice"
echo "Hello, $name" # 变量
echo "今日日期: $(date +%F)" # 命令替换
注意:若包含空格或通配符,建议加引号:
echo "$PATH"
与 printf 的对比(为何常推荐 printf)
echo
在不同平台的选项与转义行为不一致(如-e
)。printf
语义一致、可控,适合脚本与复杂格式化:
printf "%-10s %5d\n" "user" 42
常见用法示例
# 1) 追加日志并带时间戳
echo "[$(date +%F' '%T)] task done" >> /var/log/app.log# 2) 输出 JSON(注意引号)
echo '{"name":"bob","id":1}'# 3) 生成简单配置文件
echo "PORT=8080" > .env
echo "DEBUG=true" >> .env# 4) 输出空行
echo# 5) 显示包含反斜杠的原文
echo "path=C:\\Windows\\System32"
跨平台与兼容性提示
echo
更适合简单输出;脚本严谨性与可移植性优先时使用printf
。- 在
dash
、busybox
、fish
等环境里,echo -e
行为可能不同。 - 区分 Shell 内建
echo
与/bin/echo
:type echo # 查看 echo 来自何处
速查表
- 基础:
echo "text"
- 不换行:
echo -n "text"
- 解析转义:
echo -e "a\nb"
- 覆盖/追加到文件:
> / >>
- 写 root 文件:
echo ... | sudo tee /path
- 推荐复杂输出:使用
printf