【问题标题】:Bash invalid arithmetic operator on shell script [duplicate]shell脚本上的bash无效算术运算符[重复]
【发布时间】:2018-11-19 20:30:46
【问题描述】:

我有以下文件,我想在其中增加版本代码:

version=$(<versioncode.txt)
echo "$version"
version=$((version+1))
echo "$version"
echo $version >  versioncode.txt

这个文件叫做“test.sh”。在命令行上,我运行了以下命令:“bash test.sh”。 输出和错误是这样的:

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。

【问题讨论】:

  • 将 versioncode.txt 的内容添加到您的问题中。
  • 检查 versioncode.txt 是否有特殊字符:cat -A file
  • 您的输入文件中有一个 DOS 换行符。这是stackoverflow.com/tags/bash/info 的“在询问有问题的代码之前”部分中的第一件事
  • @CharlesDuffy 如何删除这个?
  • @Cyrus 输出:1

标签: bash shell ubuntu


【解决方案1】:

当 Bash 创建此错误消息时,它执行的操作非常类似于 `printf 'syntax error: invalid algorithm operator (error token is "%s")\n' "$token"。最终结果是

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

1 行来自您的 echos)您的文件必须包含回车符 (\r),因此它最终会打印 syntax error: invalid arithmetic operator (error token is ",然后移动到行首(即回车是做什么的),最后在那里打印")

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

【讨论】:

  • 问题是,bash 脚本本身是用 DOS 结尾的。数据是正确的。在 VS Code 中,您可以通过单击底部应用栏中的 CRLF 然后选择 LF 来切换。这解决了问题。还要感谢@I0b0,您的信息帮助很大。刚开始使用 Bash 很抱歉没有查看 wiki。下次我会的!
【解决方案2】:

我只是在我自己的 windows linux 子系统中做了这个,它似乎工作:

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

【讨论】:

  • printf '1\r\n' &gt;versioncode.txt 如果你想重现 OP 的问题。
猜你喜欢
  • 2020-02-27
  • 2019-04-16
  • 2013-08-17
  • 2011-03-02
  • 2018-08-17
  • 2019-12-16
  • 1970-01-01
  • 1970-01-01
  • 2020-02-13
相关资源
最近更新 更多