我知道这里有很多类似的问题,但这很特别,请继续阅读。
我有一个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。
答案 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
,要解决此问题,您需要执行以下操作:
GREP_OPTIONS="--color=never"
(或auto
)放入~/.bashrc
和source ~/.bashrc
。pacaur -Syu