shell脚本变量中的奇怪行为

时间:2012-12-21 13:35:33

标签: shell variables

我编写了一个shell脚本来使用grep解析一些文件,并在后续命令中使用结果。

源代码的相关部分是

VERSION=`grep "^Stable tag:" readme.md | awk -F' ' '{print $NF}'`
echo $VERSION
echo "Readme file version is $VERSION is it correct"

readme.md文件中的相关行是

Stable tag: 2.2.2

你会期望输出

2.2.2
Readme file version is 2.2.2 is it correct

但我得到以下作为输出

2.2.2
 is it correctrsion is 2.2.2

我很确定在我的文本文件的行尾没有(不可打印或非ascii)字符。我通过在vim中启用:set invlist命令来检查它。

知道为什么会这样吗?或者调试此问题的任何其他想法?

1 个答案:

答案 0 :(得分:2)

这看起来像DOS编辑的文件,你在类Unix系统上工作。剥去回车符(Ctrl-M)。

您可以使用tr(1)删除这些内容:

VERSION=`grep "^Stable tag:" readme.md | tr -d '\015' | awk -F' ' '{print $NF}'`

awk可能还有一些内置功能可以解决这些问题,但我不知道awk足够了。