如何解决 printf 中的算术语法错误



我在SunOS作为文件运行下面的代码.sh

#!/usr/bin/bash
#lerning linux scripting 
#
printf "%-5s %-10s %-4sn" No Name Mark 
printf "%-5s %-10s %-4.2fn" 1 James 80.1234
printf "%-5s %-10s %-4.2fn" 2 Sarah 99.8923

但是当运行在 1 以上时,我得到的误差低于SunOS

No    Name       Mark
: arithmetic syntax error.sh[5]: printf: 80.1234
: arithmetic syntax error0.1234
linux_sc.sh[5]: printf: warning: invalid argument of type f
80.12
: arithmetic syntax error.sh[6]: printf: 99.8923
: arithmetic syntax error9.8923
linux_sc.sh[6]: printf: warning: invalid argument of type f
99.89

所以是的,很确定你使用的是具有Windows样式CRLF行尾的脚本,而Unix系统使用LF。当您在 Windows 上写入文件并且不以转换行尾的方式将其传输到另一台计算机时,会发生这种情况。

获取示例脚本并通过unix2dos运行它,然后尝试运行它,得到:

No    Name       Mark
: invalid numberprintf: 80.1234
1     James      0.00
: invalid numberprintf: 99.8923
2     Sarah      0.00

不完全相同的输出,但我是在 Linux 上测试,而不是 SunOS,所以这是意料之中的。不过,足够接近,表明这是问题所在。

如果您在 SunOS 盒子上安装了dos2unix,请通过它运行脚本,看看是否可以解决问题。或者perl -pi -e 's/r//' your.sh是剥离无关回车的另一种方法。或tr -d 'r' < your.sh > new.sh或任何其他方式;仅取决于典型的 SunOS 设置已安装的内容。我已经很多年没有使用它了;不记得我的头顶了。

相关内容

  • 没有找到相关文章

最新更新