Bash:为什么这个变量没有被回应?

时间:2016-04-21 11:50:27

标签: string bash shell date unix

所以我有以下代码:

IFS=' ';
            dateArr=(${date[i]});
            monthStr=${dateArr[0]};
            day=${dateArr[1]};
            year=${dateArr[2]};
            case "$monthStr" in
                    "Jan") month="01";;
                    "Feb") month="02";;
                    "Mar") month="03";;
                    "Apr") month="04";;
                    "May") month="05";;
                    "Jun") month="06";;
                    "Jul") month="07";;
                    "Aug") month="08";;
                    "Sep") month="09";;
                    "Oct") month="10";;
                    "Nov") month="11";;
                    "Dec") month="12";;
            esac;

            if [ ${#day} -eq 1 ]
            then
                    day=0$day;
            fi

            dateTemp="$year-$month-$day";
            echo $dateTemp;

当我运行它时,我得到以下输出:

-11-28
-10-27
-01-11
-01-07
-01-07

因此,您可以看到它正确附加了$ month和$ day变量,但$ year值未添加到$ dateTemp变量中。这也很奇怪,因为$ year变量不是空的,因为如果我回应它,​​它会给我正确的年份。示例代码的格式为“2016年1月1日”,但我尝试将其转换为YYYY-MM-DD。

如果有人能帮助我,我会很感激。

干杯!

1 个答案:

答案 0 :(得分:1)

<的值以回车结束(屏幕截图中显示year)。大多数终端通过将光标移动到当前行的开头来“显示”回车符,以便跟随它的字符覆盖先前写入的字符。快速解决方法是使用

删除回车
0d

更好的解决方法是从用于填充year=${year%.} 的输入数据中删除回车符。