我正在尝试计算两个unix时间戳之间的差异。 42-23的计算仅用于测试目的。
# !/bin/bash
TARGET=1305281500
CURRENT=`date +%s`
echo $TARGET
echo $CURRENT
A=`expr 42 - 23`
B=`expr $TARGET - $CURRENT`
echo "A: $A"
echo "B: $B"
输出:
1305281500
1305281554
expr: non-integer argument
A: 19
B:
从另一个变量中减去一个变量有什么问题?该脚本正在使用unix maschine。我在Windows 7上使用Cygwin:
$ uname -a
CYGWIN_NT-6.1-WOW64 mypcname 1.7.9(0.237/5/3) 2011-03-29 10:10 i686 Cygwin
$ bash --version
GNU bash, version 4.1.10(4)-release (i686-pc-cygwin)
答案 0 :(得分:4)
问题是我在Windows上编写了脚本,其系统特定的行结尾为\r\n
。在更改为结束\n
的Unix行之后,它可以正常工作。
答案 1 :(得分:4)
您实际上只需使用bash的expr
功能即可调用$(( expr ))
。在我的cygwin上,这段代码运行正常:
# !/bin/bash
TARGET=1305281500
CURRENT=`date +%s`
echo $TARGET
echo $CURRENT
B=$((CURRENT - TARGET))
echo "B: $B"
# For validation only
echo "$TARGET $CURRENT" | awk '{print ($2-$1)}'
它给出了这个输出:
B: 8316
8316
答案 2 :(得分:3)
为什么不使用$ []?
TARGET=1305281500
CURRENT=1305281554
A=$[42 - 23]
B=$[$TARGET - $CURRENT]
echo "A: $A"
echo "B: $B"
输出:A: 19
B: -54
答案 3 :(得分:1)
我在Linux上没有看到这个问题。但是你能用线
得到正确答案吗?B=`expr $TARGET - $CURRENT`
替换为
B=`eval expr $TARGET - $CURRENT`