在 CentOS(以及一般 Linux)下,反引号( )本身不会“编码”出错,通常是字符集 / 终端 / 脚本文件编码或shell 解析导致的问题。下面按常见场景给你对应处理方式。
echo `date`
确认文件编码
file script.sh
如果是:
ISO-8859 / UTF-8 with BOM
就有问题
转换为 UTF-8(无 BOM)
iconv -f GBK -t UTF-8 script.sh -o script_utf8.sh
或
dos2unix script.sh
推荐写法(避免反引号)
echo "$(date)"
✅ $() 更安全、可读性更好
locale
如果不是 UTF-8,执行:
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
永久生效:
echo 'export LANG=en.UTF-8' >> ~/.bashrc
source ~/.bashrc
如果你用 PuTTY / Xshell:
echo '`date`'
输出的是字面量,不是命令结果
echo "`date`"
# 或
echo $(date)
/bin/sh ≠ /bin/bash建议脚本首行明确:
#!/bin/bash
✅ 不要用反引号,用 $( )
✅ 脚本统一 UTF-8 无 BOM
✅ 终端 / SSH 用 UTF-8
✅ 用 bash 而不是 sh
如果你能贴出:
我可以直接帮你定位是哪一种编码问题。