如何解决 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 安装程序所安装的内容。我已经很多年没用过了;不记得了。
我运行在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 安装程序所安装的内容。我已经很多年没用过了;不记得了。