2012-12-21 42 views
1

我編寫了一個shell腳本來使用grep解析某個文件,並在後續命令中使用結果。shell腳本變量中的奇怪行爲

源代碼的相關部分是

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命令來檢查它。

任何想法爲什麼它會發生這樣的事情?或者任何其他想法來調試這個問題?

+2

您可以單獨使用awk而不使用grep:'awk -F'''/ ^穩定標記:/ {print $ NF}'readme.md' – aragaer

+0

@aragaer謝謝。不知道我可以這樣使用'awk'。現在我還必須包含'tr'(請參見下面的答案),你認爲我仍然可以單獨使用'awk'嗎? – Sudar

+0

'人awk',我在那裏看到'sub'。可能像'awk -F'''/^Stable tag:/ {sub(「\ r」,「」,$ NF); print $ NF}'readme.md',儘管我已經在那個時候考慮過sed了。 – aragaer

回答

3

這看起來像一個DOS編輯的文件,你在Unix系統上工作。剝去回車(Ctrl-M)。

你可以使用tr(1),以消除那些:

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

awk中可能也有一些內置的功能,在這些工作,但我不知道足夠的awk此。

+0

任何想法如何將它從shell腳本變量中刪除? – Sudar

+0

@Sudar你可以使用'tr'。看我的編輯。 – kmkaplan

+0

謝謝。這似乎是問題。當我在vim中啓用隱藏字符時,奇怪的這個角色沒有出現。 – Sudar