【发布时间】:2016-01-17 17:05:08
【问题描述】:
我有这个运行良好的脚本
#!/bin/bash
if [ $# -lt 1 ]
then
echo "USAGE: `basename $0` username"
exit 1
fi
logins=`last | grep $1`
times=`echo "$logins" | awk '{print $10}'`
timesCleared=`echo "$times" | sed -e 's/(//' -e 's/)//'`
minutes=`echo "$timesCleared" | awk -F: '{ print $1*60+$2}'`
total=0
for m in $minutes
do
total=$(( $total + $m ))
done
echo $total > out.txt
cat out.txt
但是,例如,当我在交互式 shell 中尝试此命令时,它不起作用( echo $minutes 给出不同的输出):
echo "in 02:16 00:28 00:16 00:25 02:44 00:09" | awk -F: '{ print $1*60+$2;}'
打印 16
如果我在脚本中写 echo $minutes 它会给我正确的输出:
0 136 28 16 25 164 9
有人知道这是为什么吗?
【问题讨论】:
-
看起来应该有一些转义......如果不是美元符号,那么它是数学运算符,+ - * /。
-
in作为数字没有意义,因此被评估为零。 (是的,有一个数字后缀,但这就是这里发生的事情。) -
另外,我得到的一些行包含
3+23:27之类的字符串。