函数在 bash 脚本中不起作用 - 错误消息与"\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 () {

我在做什么错?非常感谢!

诊断:

  • unix实用程序一般期望线路结尾仅为n,通常会破坏或显示出具有Windows式rn线路结尾的文件的意外行为和输出 - 就像bash一样。
  • 包含 String的错误消息 r是存在这样的Windows风格的线路结束的指标。
  • 将文件传递到cat -v并在输出线结束时检查^M的输出(这是r chars。表示的方式)是一种检查Windows风格的线路结尾的文件。

修复:

  • 将带有Windows风格的线路结尾的文件转换为Unix风格的文件:
    • 如果已经安装了dos2unix实用程序(通常是不是),或安装它是一个选项;如何安装取决于您的平台;例如。:
      • 在Ubuntu上:sudo apt-get install dos2unix
      • 在OSX上,安装了自制的brew install dos2unix
    • 或者,使用标准实用程序执行转换;有几种选择;例如。:
      • sed $'s/r$//' win.txt > unix.txt
      • awk 'sub("r$", "")+1' win.txt > unix.txt
      • 上述命令的变体可以更新文件,但它们是,如果有的话。
  • 确保您用于创建shell脚本/文件的编辑器配置为使用Unix风格的线路结尾。

我通过安装dos2unix然后转换文件解决了问题。非常感谢MKEment0指出了这一点。

相关内容

  • 没有找到相关文章

最新更新