我有以下条件:
STATUSFILE = "foo.status"
NEWTIME=1389253927
if [ -f $STATUSFILE ] && [ expr $NEW_TIME - cat $STATUSFILE -gt 3600 ]; then
echo "foo"
fi;
我得到了::参数太多了
答案 0 :(得分:5)
if
的参数是一个unix命令。 [
相当于test
。 if
的结果取决于该命令的返回状态。
因此,如果要测试命令的返回状态,则应删除[
。
如果要检查命令的输出(而不是其状态),则必须保留[
并将命令放在$(
和)
中。
您的陈述应改写为:
if [ -f $STATUSFILE ] && [ $(expr $NEWTIME - $(cat $STATUSFILE)) -gt 3600 ]; then
更好的是使用由$((
和))
提供的bash的算术功能:
if [ -f $STATUSFILE ] && [ $(($NEWTIME - $(cat $STATUSFILE) )) -gt 3600 ]; then
答案 1 :(得分:0)
使用foo $(expr 1 + 1)
将命令expr 1 + 1
的输出用作命令foo
的参数。命令foo expr 1 + 1
只运行foo
,其中包含四个文字字符串expr
,1
,+
和1
作为参数(我不能想象一个理智,明确的方式,它意味着其他任何东西)。