函数在 bash 脚本中不起作用 - 与“\r”相关的错误消息
Function not working in a bash script - error messages relate to '\r'
我最近安装了新版本的 Debian。我创建了这个简单的脚本:
#!/bin/bash
print_something () {
echo Hello I am a function
}
print_something
print_something
然而,这在我发出 bash test.sh
:
时显示此错误
test.sh: line 3: $'\r': command not found
test.sh: line 4: syntax error near unexpected token `$'{\r''
'est.sh: line 4: `print_something () {
我做错了什么?
非常感谢!
我通过安装 dos2unix
然后转换文件解决了这个问题。
非常感谢 mklement0 指出了这一点。
正在诊断:
- Unix 实用程序通常期望行尾只有
\n
,并且通常会中断或显示意外行为并输出具有 Windows 样式 \r\n
行尾的文件 - 如bash
在这里做。
- 包含 字符串
\r
的错误消息表明存在此类 Windows 样式的行结尾。
- 将文件传递给
cat -v
并在输出行末尾检查 ^M
的输出(这是 \r
个字符的表示方式)是一种检查根据需要为 Windows 样式的行结尾创建文件。
修复:
- 将具有 Windows 风格的行尾的文件转换为 Unix 风格的行尾:
- 确保您用来创建 shell 用于 Unix 实用程序的脚本/文件的编辑器配置为使用 Unix 样式的行结尾。
我最近安装了新版本的 Debian。我创建了这个简单的脚本:
#!/bin/bash
print_something () {
echo Hello I am a function
}
print_something
print_something
然而,这在我发出 bash test.sh
:
test.sh: line 3: $'\r': command not found
test.sh: line 4: syntax error near unexpected token `$'{\r''
'est.sh: line 4: `print_something () {
我做错了什么? 非常感谢!
我通过安装 dos2unix
然后转换文件解决了这个问题。
非常感谢 mklement0 指出了这一点。
正在诊断:
- Unix 实用程序通常期望行尾只有
\n
,并且通常会中断或显示意外行为并输出具有 Windows 样式\r\n
行尾的文件 - 如bash
在这里做。 - 包含 字符串
\r
的错误消息表明存在此类 Windows 样式的行结尾。 - 将文件传递给
cat -v
并在输出行末尾检查^M
的输出(这是\r
个字符的表示方式)是一种检查根据需要为 Windows 样式的行结尾创建文件。
修复:
- 将具有 Windows 风格的行尾的文件转换为 Unix 风格的行尾:
- 确保您用来创建 shell 用于 Unix 实用程序的脚本/文件的编辑器配置为使用 Unix 样式的行结尾。