2013-10-11 73 views
0

我有一个接受YYYY-MM-DD格式输入日期的脚本。将值赋给unix中的变量

之后,我用sed删除了连字符( - ),它给了我一个输出YYYY MM DD。

我的问题是,我如何将这三个数字分配给三个不同的变量。

实施例:

2013年11月23日将成为2013 11 23

echo "Please input date[yyyy-mm-dd]: " 
read date 
echo $date | sed 's/\-/ /g' #this will give me the output of yyyy mm dd 

我希望分配三个数字(YYYY,毫米,DD)发送至个别像这样的变量;

X=yyyy 
Y=mm 
Z=dd 

谢谢。

+0

尝试切割命令 – SriniV

回答

7

尝试是这样的:

X="2013 11 12" 
read X Y Z <<<$(echo $X) 
+0

+1简单。优雅。 UNIX。 – 2013-10-11 12:11:21

+0

另一个问题,我怎样才能确保月份和日期的变量将有一个固定的两位数字。例如:Y = 2 Z = 9,我希望那些变成Y = 02和Z = 09,并且我想确保当输入是两位数时不会返回3位数。例如Y = 11 Z = 23,它不能成为Y = 011和Z = 023 –

+0

请忽略这一点,我明白了。再次感谢! –

0

cut command

这里产生的变量由空间分隔使剪切命令将拆分变量进入基于空间的分隔符-d' '-f1,2,3,...单独的领域将获得分割后场

result=`echo $date | sed 's/\-/ /g'` 

X=`echo $result | cut -d' ' -f1` 
Y=`echo $result | cut -d' ' -f2` 
Z=`echo $result | cut -d' ' -f3` 

echo $X $Y $Z 
1

你可以做到以下几点:

> now=2013-11-23 
> year=`echo $now | awk -F- '{ print $1 }'` 
> month=`echo $now | awk -F- '{ print $2}'` 
> day=`echo $now | awk -F- '{ print $3 }'` 
> echo $year.$month.$day 
2013.11.23 
0

如果您的需要只是三个变量,其中包括年份,月份和日期。您可以简单地通过

#Get the year 
X=`date '+%Y'` 
echo $X 

#Get the month 
Y=`date '+%m'` 
echo $Y 

#Get the date 
Z=`date '+%d'` 
echo $Z