不可能的bash:语法错误:无效的算术运算符(错误标记是"")

时间:2014-08-17 11:49:12

标签: bash shell operators syntax-error character

我知道这里有很多类似的问题,但这很特别,请继续阅读。

我有一个bash脚本除了比较两个数字之外什么都不做,基本上就是这样:

[[ 1408039118 -lt 1401215749 ]]

现在,运行该脚本会引发以下错误:

/usr/bin/pacaur: line 179: 1408039118: syntax error: invalid arithmetic operator (error token is "")

所以我明白一定是错的,这是我的第179行:

[[ "${depsAlastmodified[$i]}" -lt 1401215749 ]] && note "f" $"no AUR metadata for ${colorR}${depsAname[$i]}${reset} package"

通过bash -x执行此操作会显示:

+ [[ 1408039118 -lt 1401215749 ]]
/usr/bin/pacaur: line 179: 1406628774: syntax error: invalid arithmetic operator (error token is "")

这确实没有任何明显的错误。我尝试使用od -c对该变量进行进一步调试:

echo ${depsAlastmodified[$i]} | od -c

输出结果为:

+ echo '1408039118'
+ od -c
0000000   1   4   0   8   0   3   9   1   1   8 033   [   m 033   [   K
0000020  \n
0000021

但现在我不确定如何阅读本文。我知道换行符属于echo命令。但究竟是什么033 [ m 033 [ K?这是否属于我的问题?

我也尝试通过bc运行该号码:

echo ${depsAlastmodified[$i]} | bc | od -c

这是输出:

+ echo '1408039118'
+ bc
+ od -c
(standard_in) 1: illegal character: ^[
(standard_in) 1: syntax error
(standard_in) 1: illegal character: ^[
(standard_in) 1: illegal character: K
0000000

该变量有问题。我还能尝试什么?如何解决这个问题?

仅供参考,这是full issue history

2 个答案:

答案 0 :(得分:4)

您的数组中似乎有尾随字符。

使用tr -cd '[[:digit:]]'尝试此操作,这将删除输入中的所有非数字:

echo "${depsAlastmodified[$i]}" | tr -cd '[[:digit:]]' | od -c

它应该给:

0000000   1   4   0   8   0   3   9   1   1   8
0000012

答案 1 :(得分:1)

它与行尾的grep adding color转义内容有关,

跟踪此问题并解决此问题并非易事。 作为参考,如果有其他人遇到此问题: 我的GREP_OPTIONS="--color=always"文件中有~\.bashrc,要解决此问题,您需要执行以下操作:

  • 卸载pacaur,删除完整的/ tmp / pacaurtmp - * /目录。
  • GREP_OPTIONS="--color=never"(或auto)放入~/.bashrcsource ~/.bashrc
  • 重新安装pacaur并进行整个系统升级pacaur -Syu