如何在Shell脚本中将值追加到变量?

3

我从属性中获取了一个变量值,并且可以在sh文件中访问它。但是我无法将另一个值附加到该变量。

请提供建议。

$ echo "Build ID from properties:"$BUILD_ID
Build ID from properties: abcd_v6_c1

$ echo " num----------------" build_${BUILD_ID}.zip
.zip---------------- build_abcd_v6_c1

请建议如何追加.zip值。

2
你的 $BUILD_ID 变量末尾可能有一个特殊字符,对输出产生不良影响(例如 ^M^A)。你可以使用 cat -A <<< "$BUILD_ID" 进行检查。 - SLePort
5个回答

9

假设我们有一个变量var1=value。 如果我想在变量开头添加一些文本,可以这样做:

var1="some text${var1}"

如果我想在末尾添加一些文本,可以这样做:
var1="${var1}some text"

4

看起来你的$BUILD_ID变量中有一个Windows 回车符

可以通过以下命令检查(回车符将显示为^M):

cat -A <<< "$BUILD_ID"

在你的终端中,你可以尝试这样做(获取^M字符,请使用CTRL+V+M):
$ BUILD_ID="585548979^M"
$ echo ${BUILD_ID}text

结果应该是:
text48979

你可以使用Bash参数替换来清除你的变量:
你可以通过Bash参数替换来清除变量:
$ ID=${BUILD_ID%$'\r'}
$ echo ${ID}text
585548979text

@chepner,感谢您的编辑。请注意${BUILD_ID/%$'\r'/}也是有效的,因为它会将最短的$'\r'字符串从后面替换为空。但是像您建议的那样简单地缩短字符串更简单。 - SLePort
哦,抱歉。我实际上将${BUILD_ID%/$'\r'/}读成了${BUILD_ID/$'\r'/%}(交换了初始的/%),这就是为什么我认为它是错误的。 - chepner
干得好(请注意,cat -A 是 GNU 扩展;cat -et 也适用于 BSD/OSX catsed -n l 是符合 POSIX 标准的替代方法)。 - mklement0

0

以下方法适用于我。我的.sh文件包含以下内容:

#!/bin/bash -x
. /usr/test/build.properties
echo $BUILD_ID
echo "num----------------" build_${BUILD_ID}.zip

我得到的输出是下面的输出 .zip---------------- build_abcd_v6_c1但我需要build_abcd_v6_c1.zip。 - sampath

0

您可以简单地使用赋值(=)运算符来追加文本。

a=don
b=$a" jon"
echo $b #==>don jon

0

谢谢大家,

问题已经解决了...这是因为^M的原因,感谢@Kenavoz,现在我可以得到正确的ID并且能够继续进行输出。

更改:BUILD_ID=${ID%$'\r'}

谢谢, Sampath A


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接