未预期的符号 `$‘in\r‘‘ 附近有语法错误 的解决方式
Linux和Windows系统中换行符的主要区别在于使用的字符不同。在Linux和Unix系统中,每行文本的结尾使用一个字符表示换行,即换行符(Line Feed,LF),用“而在Windows系统中,每行文本的结尾使用两个字符表示换行,即回车符(Carriage Return,CR)和换行符(Line Feed,LF)的组合,用“:要将 DOS/Windows 文件转换为 Unix/Linux
问题描述
今天把windows上编写好的sh脚本,然后放到linux上执行,出现了上面的错误,表示linux系统无法识别\r。
问题解决
安装dos2unix来进行换行符的转换。
// 1.检查是否dos2unix,如果什么都没打印表示没有安装
rpm -qa|grep dos2unix
// 2.安装dos2unix
// Debian/Ubuntu 上安装
apt-get install dos2unix
// 在 CentOS/RHEL 上安装
yum install dos2unix
// 在 Fedora 上安装
dnf install dos2unix
// 3.转换
// 进入文件所在位置
cd /
// 转换换行符
dos2unix test.sh
转换成功:
![]()
转换后执行sh脚本就不会报错了。
博学而笃志,切问而近思
问题原因:Linux和Windows系统中换行符的主要区别在于使用的字符不同。在Linux和Unix系统中,每行文本的结尾使用一个字符表示换行,即换行符(Line Feed,LF),用“\n”表示。而在Windows系统中,每行文本的结尾使用两个字符表示换行,即回车符(Carriage Return,CR)和换行符(Line Feed,LF)的组合,用“\r\n”表示。所以window中用换行时比linux多了个\r,才会提示无法识别\r。
dos2unix :要将 DOS/Windows 文件转换为 Unix/Linux 格式。其中2表示to,转换的意思。
与之相反的
unix2dos:要将 Unix/Linux 文件转换为 DOS/Windows 格式。
用法
// dos2unix 文件名(多个文件用空格隔开)
dos2unix test.sh
dos2unix test1.sh test2.sh
// unix2dos 文件名(多个文件用空格隔开)
unix2dos test.sh
unix2dos test1.sh test2.sh
除此之外还有其他用法。通过dos2unix -h 和 unix2dos -h 获取

结语
虽然是个小问题,但平时多注意的话就能减少一些不必要的错误,从而减少去排查的时间。
更多推荐

所有评论(0)