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

How to resolve arithmetic syntax error in printf

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

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

但是当 运行 高于 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 是另一种剥离无关的运输 returns 的方法。或 tr -d '\r' < your.sh > new.sh 或任何其他方式;仅取决于典型的 SunOS 安装程序所安装的内容。我已经很多年没用过了;不记得了。