2015-11-05 73 views
1

什麼bash基本都忘記了?我只是試圖建立一個腳本文件名了版本和構建信息...Bash從文件中提取字符串作爲變量使用

所以,死很容易,只要硬編碼 - 這一切是有道理的:

VERSION=1.0.1 
BUILD=45 
NAME=Product-$VERSION-$BUILD.zip 
echo $NAME 
> Product-1.0.1-45.zip 

但是,如果在VERSION經由(單個)線提供了一種在文件與內容只是 「1.0.1」:

VERSION=$(<version.txt) 
echo $VERSION 
> 1.0.1 
BUILD=45 
NAME=Product-$VERSION-$BUILD.zip 
echo $NAME 
> -45.zip-1.0.1 

??????「-45.zip-1.0.1」?

好,我雖然它可能是一些遺留換行符或文件結束字符,所以我嘗試:

VERSION=$(cat version.txt) 
VERSION=$(cat version.txt | tr -d '\n') 
VERSION=$(sed -n '1p' version.txt) 

同樣的效果。使用引號NAME="..."無歡(我原以爲有一些插值回事...)

而且,這是所有在Mac上使用:

bash --version 
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin15) 
Copyright (C) 2007 Free Software Foundation, Inc. 

謝謝。

+3

該文件具有DOS行尾; VERSION實際上是'$'1.0.1 \ r''。刪除DOS行末尾。 – chepner

+0

是的 - 就是這樣!忘了\ r(當然在nix系統上是一個_carriage return_,因此它爲什麼會返回到NAME的開頭並覆蓋它,應該已經發現了。謝謝。 – timlukins

回答

2

嘗試:

VERSION=$(tr -d '\r' < version.txt) 

version.txt似乎有DOS行結束。