用vim去掉utf-8 BOM

博客介绍了在Vim中设置UTF - 8 BOM的方法。去掉UTF - 8 BOM可使用命令:set nobomb,保留UTF - 8 BOM则使用命令:set bomb。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

'去掉utf-8 BOM
:set nobomb
'保留utf-8 BOM
:set bomb


从你执行 `cat -A test01.sh` 的输出来看,你的脚本中存在 **Windows 风格换行符(CRLF)** 和 **UTF-8 BOM 字符** 以及 **中文字符的乱码表示**。这些都会导致 Bash 解析失败。 --- ## 🔍 错误分析 以下是你的 `cat -A` 输出: ``` #!/bin/bash^M$ read -t 5 -p "M-eM-^FM-^YM-eM-^FM-^YM-gM-^\M-^K::" pwd001^M$ printf "\n"^M$ echo ${pwd001}^M$ ``` ### ✅ 存在的问题: 1. `^M` 表示 `\r`,即 Windows 换行符(CRLF),Bash 不喜欢这个。 2. `"M-eM-^FM-^Y..."` 是 UTF-8 编码中中文字符的错误显示方式,说明文件可能包含 **BOM 头** 或使用了不兼容的编码格式。 3. 整个脚本每行结尾都有 `$`,表示是 LF(`\n`),但前面还有 `^M`(`\r`),说明是 CRLF 混合格式。 --- ## ✅ 解决方案 ### ✅ 方法一:使用 `dos2unix` 清理 CRLF(推荐) ```bash dos2unix test01.sh ``` 如果你还没有安装 `dos2unix`,可以使用以下命令安装: - CentOS / RHEL: ```bash yum install dos2unix ``` - Ubuntu / Debian: ```bash apt-get install dos2unix ``` --- ### ✅ 方法二:使用 `sed` 删除所有 `\r` 字符 ```bash sed -i 's/\r//' test01.sh ``` --- ### ✅ 方法三:使用 `vim` 查看并转换文件格式 打开文件: ```bash vim test01.sh ``` 查看当前文件格式: ```vim :set fileformat? ``` 如果输出为 `fileformat=dos`,请运行: ```vim :set fileformat=unix :wq ``` --- ### ✅ 方法四:确保文件没有 BOM 使用 `xxd` 检查是否有 BOM: ```bash xxd test01.sh | head -n 1 ``` 如果看到类似: ``` 00000000: efbb bf23 212f 6269 6e2f 6261 7368 0d0a ...#!/bin/bash.. ``` 说明有 BOM(`ef bb bf`)。可以用 `sed` 去掉: ```bash sed -i '1s/^\xEF\xBB\xBF//' test01.sh ``` --- ## ✅ 最终修复后的脚本内容 ```bash #!/bin/bash read -t 5 -p "Input password: " pwd001 printf "\n" echo "You entered: ${pwd001}" ``` 保存后运行: ```bash chmod +x test01.sh ./test01.sh ``` 或者: ```bash bash test01.sh ``` --- ## 📌 总结 | 问题 | 原因 | 解决方法 | |------|------|-----------| | `^M`、`$'\r'` 报错 | Windows 换行符(CRLF) | 使用 `dos2unix` 或 `sed -i 's/\r//'` | | 中文字符乱码 | 文件编码含 BOM 或非 UTF-8 | 使用 `xxd` 检查并删除 BOM | | `': 不是有效的标识符` | 变量名被插入非法字符 | 使用 `cat -A` 检查并清理 | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值