在shell脚本上Bash无效的算术运算符

Bash invalid arithmetic operator on shell script

本问题已经有最佳答案,请猛点这里访问。

我有以下文件,我想增加版本码:

1
2
3
4
5
version=$(<versioncode.txt)
echo"$version"
version=$((version+1))
echo"$version"
echo $version >  versioncode.txt

该文件名为"test.sh"。 在命令行上,我运行了以下命令:"bash test.sh"。
输出和错误是这样的:

1
2
3
4
5
niklasraab@DESKTOP-BLJGB4D:/mnt/c/Flutter/src/hapii$ bash test.sh
1
")syntax error: invalid arithmetic operator (error token is"
1
niklasraab@DESKTOP-BLJGB4D:/mnt/c/Flutter/src/hapii$

问题是我得到了"无效的算术运算符"错误。 我在Windows上运行这个项目。 用bash子系统安装ubuntu。


我只是在我自己的Windows Linux子系统中做到这一点,它似乎工作:

1
2
3
4
5
6
7
8
9
10
11
12
nellis@L-X-NELLIS:~$ echo 1 >> versioncode.txt
nellis@L-X-NELLIS:~$ cat versioncode.txt
1
nellis@L-X-NELLIS:~$ version=$(($(cat versioncode.txt)))
nellis@L-X-NELLIS:~$ echo"$version"
1
nellis@L-X-NELLIS:~$ version=$((version+1))
nellis@L-X-NELLIS:~$ echo"$version"
2
nellis@L-X-NELLIS:~$ echo $version >  versioncode.txt
nellis@L-X-NELLIS:~$ cat versioncode.txt
2


当Bash创建此错误消息时,它会执行与"printf"语法错误类似的操作:无效算术运算符(错误标记为"%s") n""$ token"。 为此最终成为

1
")syntax error: invalid arithmetic operator (error token is"

(1行来自echo s)你的文件必须包含一个回车符( r)字符,所以它最终打印syntax error: invalid arithmetic operator (error token is",然后移动到行的开头(这是回车的内容) 确实),最后在那里打印")

要使其工作,您应该从文件printf '%s'"$version"> versioncode.txt中提取当前版本号以清理文件,并在脚本中使用该命令(而不是echo)以确保该文件的格式。