2015-11-05 102 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行结束。