【发布时间】:2016-02-06 11:34:39
【问题描述】:
我忘记了哪些 bash 基础知识?我只是想用 VERSION 和 BUILD 信息在脚本中建立一个文件名......
所以,如果硬编码很容易——这一切都说得通:
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.
谢谢。
【问题讨论】:
-
文件有 DOS 行结尾; VERSION 实际上是
$'1.0.1\r'。删除 DOS 行尾。 -
是的——就是这样!忘记了 \r (当然在 *nix 系统上是一个 回车 因此它为什么要返回 NAME 的开头并覆盖它。应该已经发现了。谢谢。
标签: bash