之前写shell脚本时,写过一个比较时间的函数,接受两个参数均为 yyyymmdd HH:MM::SS格式,然而测试结果显示返回值固定(同一天时),后来才发现是传参的问题
比较时间的函数:
function timecmp
{
t1=$1
t2=$2
echo "1-$1 2-$2 3-$3 4-$4"
TS1=`date -d "$t1" +%s`
TS2=`date -d "$t2" +%s`
if [ $TS1 -gt $TS2 ]
then
echo 1
else
echo 0
fi
}
错误的使用:
#!/bin/bash
. ./MyFuncs
t1="20221001 10:01:01"
t2="20221001 10:01:00"
res=$(timecmp $t1 $t2)
echo "res: $res"
输出结果为(函数将 t1 t2 分别视为两个参数):
res: Here in function timecmp
1-20221001 2-10:01:01 3-20221001 4-10:01:00
0
正确的使用:
#!/bin/bash
. ./MyFuncs
t1="20221001 10:01:01"
t2="20221001 10:01:00"
res=$(timecmp "$t1" "$t2")
echo "res: $res"
输出结果:
res: Here in function timecmp
1-20221001 10:01:01 2-20221001 10:01:00 3- 4-
1
总结:
1. 函数执行结果不如预期时,不妨看一下在函数内部打印一下形参;
2. 类似这种参数内部含空格的情况,应用双引号括起来传参。