【问题标题】:Bash extract string from file to use as variable [duplicate]Bash从文件中提取字符串以用作变量[重复]
【发布时间】: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


【解决方案1】:

试试:

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

version.txt 似乎有 DOS 行尾。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-06
    • 2021-11-13
    • 2019-06-22
    • 1970-01-01
    • 2017-11-26
    • 2020-10-25
    • 2017-12-27
    • 1970-01-01
    相关资源
    最近更新 更多