bash脚本添加时间戳函数时报$'{ '语法错误如何解决
问题原因
你遇到的syntax error near unexpected token $'{ '报错,核心原因是脚本的换行符格式不兼容:
- 若你曾在Windows系统下编辑过该脚本,Windows默认使用CRLF(
\r\n)作为行尾换行标识 - Linux环境下的Bash仅识别LF(
\n)作为合法换行符,多余的\r回车符会被识别为非法语法字符,从而触发报错
解决方案
你可以任选以下任意一种方法转换脚本换行符为Linux兼容格式:
方法1:使用dos2unix工具转换(最便捷)
- 先安装工具(已安装可跳过):
- CentOS/RHEL 系系统执行:
yum install -y dos2unix - Debian/Ubuntu 系系统执行:
apt install -y dos2unix
- CentOS/RHEL 系系统执行:
- 执行转换命令:
dos2unix dothing.sh
方法2:使用sed命令直接清理行尾回车符
无需额外安装工具,直接执行:sed -i 's/\r$//' dothing.sh
方法3:使用vim编辑器修改格式
- 用vim打开脚本:
vim dothing.sh - 按
:进入命令模式,输入以下指令后回车:set fileformat=unix - 输入
:wq保存退出即可
验证方式
转换完成后执行cat -A dothing.sh查看文件内容,行尾仅显示$即为格式正常,如果行尾显示^M$说明还有未清理的Windows格式换行符。
你脚本本身的时间戳添加逻辑没有问题,完成格式转换后即可正常运行。
内容的提问来源于stack exchange,提问作者ImBaldingPleaseHelp
相关产品推荐
相关产品推荐

