我有一个文件存储版本信息,我写了一个shell来读取两个字段并将它们组合起来。但是,当我连接这两个字段时,它会向我显示一个令人讨厌的结果。
版本文件:
buildVer = 3
version = 1.0.0
脚本看起来像:
#!bin/bash
verFile='version'
sdk_ver=`cat $verFile | sed -nE 's/version = (.*)/\1/p'`
build_ver=`cat $verFile | sed -nE 's/buildVer = (.*)/\1/p'`
echo $sdk_ver
echo $build_ver
tagname="$sdk_ver.$build_ver"
echo $tagname
输出显示
1.0.0
3
.30.0
我试图直接回显sdk_ver而不从文件中读取它,这段脚本效果很好。所以我认为它可能与sed有关,但我无法弄清楚如何修复它。
有谁知道为什么会这样?
答案 0 :(得分:2)
由于DOS行结尾存在\r
文件的每一行version
,您就会遇到此问题。
使用dos2unix
或此sed
命令首先删除\r
:
sed -i 's/\r//' version
顺便说一句,您还可以使用纯粹的BASH结构简化脚本:
#!/bin/bash
while IFS='= ' read -r k v; do
declare $k="$v"
done < <(sed $'s/\r//' version)
tagname="$version.$buildVer"
echo "$tagname"
这将给出输出:
1.0.0.3
答案 1 :(得分:0)
替代解决方案,awk
:
awk '/version/{v=$3} /buildVer/{b=$3} END{print v "." b}' version.txt
示例:强>
$ cat file.txt
buildVer = 3
version = 1.0.0
$ awk '/version/{v=$3} /buildVer/{b=$3} END{print v "." b}' file.txt
1.0.0.3