![请解释下面的命令](https://linux22.com/image/113565/%E8%AF%B7%E8%A7%A3%E9%87%8A%E4%B8%8B%E9%9D%A2%E7%9A%84%E5%91%BD%E4%BB%A4.png)
getDateFormat() {
year=`echo $1 | awk -F"-" '{print $2}'`
mm=`echo $1 | awk -F"-" '{print $3}'`
i=1
for x in January February march april may july jun august September October November December
do
if [ $mm -eq $ii ]; then
month="$x"
break
fi
ii=`expr $ii + 1`
done
mday=`echo $1 | awk -F"_" '{print $1}' | awk -F"-" '{print $4}'`
tmp_date="${mday}_${month}_$year
}
我想知道上面的函数是做什么的?
$ awk '$2 == "1" { print $0 }' cols.txt
在匹配发生的地方,打印整行。但是这个命令返回什么
echo $1 | awk -F"-" '{print $2}'
$ii
- 这是什么?
i=1;
echo $ii
它没有打印任何东西。
答案1
$1
是第一个位置参数,即函数的参数。将 s 字段分隔符awk -F-
设置awk
为破折号,并print $2
打印第二个字段。所以从aa-bb-cc
,你会得到bb
。
据推测,该函数预计会被调用为,getDateFormat something-2017-06
这看起来很奇怪,但年份是从第二个破折号分隔的字段中选取的。
$ii
会引用一个变量,但它在测试之前没有设置if [ $mm -eq $ii ];
,因此测试会看到[ 123 -eq ]
(123
可能从 中选取一些数字$1
)。这会导致错误,因为运算符-eq
缺少另一个操作数。