2014-05-25 336 views
1

我得到这个简单的bash脚本:BASH变量和awk内部变量

#! /bin/bash 

DATE=$(date +"%d%m%Y%H%M") 

DATETIME=$DATE | awk '{print substr($1,1,2)"."substr($1,3,2)"."substr($1,5,4)", "substr($1,9,2)":"substr($1,11,2)}' 

echo $DATETIME 

可变DATE的输出是例如

250520141600 

和可变DATETIME的输出应该是:

25.05.2014, 16:00 

,但我什么也没得到。

怎么了?

回答

2

它不起作用,因为您没有echo内容DATE管道到awk之前。

>> DATE=$(date +"%d%m%Y%H%M") 
>> DATETIME=$(echo $DATE | awk '{print substr($1,1,2)"."substr($1,3,2)"."substr($1,5,4)", "substr($1,9,2)":"substr($1,11,2)}') 
>> echo $DATETIME 
25.05.2014, 16:07 
3

您需要调用一个命令并将输出放入变量中。由于输出有空格,所以应该引用它。

DATETIME="$(echo $DATE | awk ...)" 

此外,为什么不只是调整日期输出为你想要的格式?

4

不需要使用awk来格式化输出。只要这样做:

$ DATETIME=$(date +"%d.%m.%Y, %H:%M") 
$ echo "$DATETIME" 
25.05.2014, 15:21 

也就是说,您可能想要存储一个日期并以多种不同的方式显示它。为了做到这一点,我会建议使用date,而不是awk

$ DATE=$(date) 
$ echo "$DATE"  
Sun May 25 15:39:09 BST 2014 
$ date -d "$DATE" +"%d%m%Y%H%M" 
250520141539 
$ date -d "$DATE" +"%d.%m.%Y, %H:%M" 
25.05.2014, 15:39 

以及显示当前的日期/时间,date也可以通过包含日期的字符串,并重新给你。

+0

+1为正确的方法。 –